汇编语言 第二章 —— 80x86微处理器
汇编语言 第二章 —— 80x86微处理器
回头看第二章其实就两点比较重要。一个是寄存器的一些基本概念,另一个是状态标志位。
寄存器
我们按顺序了解一下这些寄存器。
数据寄存器
- 一个寄存器有16位(2字节,1字),在内存中占两个存储单元的位置所以可以对半拆分成高八位和低八位。
- 8086的基址寄存器为BX,BP。这个知识点在第三章中用于识别基址加变址寻址有用。
- CX用作计数器。之后的移位运算中当移动位数超过1时就会用CL来存。
- 经常用DX:AX来表示两个字的数据。
指针寄存器
变址寄存器
这里要跟前面的基址一起组成基址加变址寻址。
段寄存器
专用寄存器
练习题:
状态标志位(Flag)
- 进位标志(CF)
若 结果的最高位上产生一个进位或借位则CF=1,否则为0. - 溢出标志(OF)
运算过程中产生溢出则OF=1。
eg:正数 + 正数 = 负数,负数 + 负数 = 正数,正数 - 负数 = 负数 ,负数 - 正数 = 正数……即为溢出。 - 零标志(ZF)
若运算结果为0则ZF = 1,否则为0. - 符号标志(SF)
SF与结果的最高位相同,即正数SF = 0,负数SF = 1. - 奇偶标志(PF)
若结果低8位中所含1的个数为偶数则PF = 1,否则PF = 0 - 辅助进位标志(AF)
若结果的低4位产生一个进位或借位则AF = 1,否则为0
这些标志位前四个比较重要,是第二章考察的核心要点。
来看个例题:
- 虽然这里最高位从0变到1,但这是第二高位产生的进位而不是最高位产生的进位。所以这里CF = 0
- 最高位为1,显然SF = 1
- 结果不为0,故ZF = 0
- 我们发现这里两个正数相加结果却是一个负数说明溢出了。判断16进制有符号数是正数还是负数我们不用麻烦的转化成二进制去看最高位,当16进位数最高位的数字>8时说明转化成二进制后必然是一个以1打头的数,即为负数。相反,当16进制数最高位<8时为正数。
- 这里最高位产生进位故CF = 1
- 结果显然不为0故ZF = 0
- 进位而产生的1被舍去,所以最高位是0故SF = 0
- 这里虽然产生了进位但这并不代表溢出了。因为这里是正数 + 正数 = 正数。故并没有溢出即OF = 0