文章目录
- 前言
- 正文——(一气呵成解决本文内容)
- 结语
前言
📌
汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优化方面有重要作用。此外,它在逆向工程和安全领域不可或缺,帮助分析软件运行机制并增强漏洞修复能力。
本专栏的汇编语言学习章节主要是依据王爽老师的《汇编语言》来写的,和书中一样为了使学习的过程容易展开,我们采用以8086CPU为中央处理器的PC机来进行学习。
文章主要内容:几条基础的汇编指令的讲解,例如 MOV
、ADD
等常用指令。
正文——(一气呵成解决本文内容)
通过汇编指令控制 CPU 进行工作,看一下下表中的几条指令。
注意:
如:mov ax,18和MOV AX,18的含义相同;bx和BX的含义相同:
接下来看一下CPU执行下表中的程序段的每条指令后,对寄存器中的数据进行的改变。
示例1:
指令执行后 AX 中的数据为多少?思考后看下列分析。
分析:
程序段中的最后一条指令add ax,bx
,在执行前 ax和bx中的数据都为8226H,相加后所得的值为:1044CH,但是ax为16位寄存器,只能存放4位十六进制的数据,所以最高位的1不能在ax中保存,ax中的数据为:044CH。
示例2:
指令执行后 AX中的数据为多少?思考后看下列分析。
分析:
程序段中的最后一条指令add al,93H
,在执行前,al中的数据为C5H,相加后所得的值为:158H,但是al为8位寄存器,只能存放两位十六进制的数据,所以最高位的1丢失,ax中的数据为:0058H。(这里的丢失,指的是进位值不能在8位寄存器中保存,但是CPU并不真的丢弃这个进位值,关于这个问题,我们将在之后的内容中讨论。)
📌注意:
此时al是作为一个独立的8位寄存器来使用的,和ah没有关系,CPU在执行这条指令时认为 ah 和a是两个不相关的寄存器。不要错误地认为,诸如
add al,93H
的指令产生的进位会存储在 ah中,add al,93H
进行的是8位运算。如果执行
add ax,93H
,低8位的进位会存储在ah中,CPU 在执行这条指令时认为只有一个16位寄存器ax,进行的是16位运算。指令add ax,93H
执行后,ax 中的值为:0158H。此时,使用的寄存器是16位寄存器ax,add ax,93H
相当于将ax中的16位数据00c5H和另一个16位数据0093H相加,结果是16位的0158H。
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如:
等都是正确的指令,而:
等都是错误的指令,错误的原因都是指令的两个操作对象的位数不一致。
结语
今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。
也可以点点关注,避免以后找不到我哦!
Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!