复习要点4:寄存器功用与指令功能(1)
(2012-04-11 21:52:22)
标签:
复习2012 |
分类: 微机 |
■ 8x16位通用寄存器:4个16位数据寄存器(AX、BX、CX、DX)和4个16位指针与变址寄存器(SP、BP与SI、DI)
(1)AX:可分为AH(高字节)和AL(低字节)两个8位寄存器,所有的I/O指令都使用AX或AL与外设端口交换信息;乘除法指令隐含用到AX;支持寄存器(直接)寻址。
(2)BX:可分为BH和BL两个8位寄存器,进行存储器操作数寻址时可用BX存放操作数在内存中数据段内的偏移地址(称为基址指针,且默认段寄存器为DS),可支持支持寄存器(直接)寻址,寄存器间接寻址,寄存器相对寻址,或与SI、DI配合支持基址变址寻址以及基址变址相对寻址;
(3)CX:可分为CH和CL两个8位寄存器,LOOP指令隐含用到CX,JCXZ指令判断CX的值是否为零以决定是否转移,移位指令可用CL指示移位位数;支持寄存器(直接)寻址。
(4)DX:可分为DH和DL两个8位寄存器,在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数;支持寄存器(直接)寻址。
(5)SP:堆栈指针,总是指向栈顶(其值为栈顶字节单元在SS段内的偏移地址)。由于堆栈相关操作总是以16位二进制数为单位进行,所以对8086CPU来说SP的初始值应为偶数(偶地址使得8086CPU存取16位数据可以在一个总线访问周期内完成),且每次入栈/出栈操作SP的值分别减2和加2;支持寄存器(直接)寻址。
(6)BP:也称为基址指针,用于进行存储器操作数寻址时存放操作数的偏移地址,但默认段寄存器为SS;可支持支持寄存器(直接)寻址,寄存器相对寻址,或与SI、DI配合支持基址变址寻址以及基址变址相对寻址(各种BP相关的存储器寻址方式中,其默认段寄存器均为SS)。BP不支持寄存器间接寻址(例如"MOV AX,[BP]"实际上是用"MOV AX,[BP+0]"表达的,可以认为前者是后者的简写,即便写成"MOV AX,[BP]"其指令长度也比类似的"MOV AX,[BX]"指令的长度多一个字节。"MOV AX,[BP]"同"MOV AX,[BP+1]"和"MOV AX,[BX+1]"一样都是3字节指令,而"MOV AX,[BX]"为2字节指令)。
(7)SI:(源)变址寄存器,通常用在字符串操作(对应字符串操作指令)时存放源串在数据段DS内的偏移地址;可支持支持寄存器(直接)寻址,寄存器相对寻址,或与BX、BP配合支持基址变址寻址以及基址变址相对寻址。
(8)DI:(目的)变址寄存器,通常用在字符串操作(对应字符串操作指令)时存放目的串在附加数据段ES内的偏移地址;非字符串操作时,默认段寄存器为DS,可支持支持寄存器(直接)寻址,寄存器相对寻址,或与BX、BP配合支持基址变址寻址以及基址变址相对寻址。
■
(1)IP用来存放下一条要读取的指令在代码段中的偏移地址。IP在程序运行中能自动加1修正,从而使其始终存放的是下一条要读取的指令在代码段的偏移地址。
(2)由于CS和IP的内容决定了程序的执行顺序,因此程序员不能直接用赋值指令对其内容进行修改。
(3)有些指令能使IP和CS的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢复原值(如子程序调用指令和返回指令)
■
(1)FLAGS为一个16位的寄存器,但只用了其中9位,包括6个状态标志位,3个控制标志位。
(2)状态标志位:用来反映算术和逻辑运算结果的一些特征。如结果是否为“0”,是否有进位、借位、溢出等。不同指令对状态标志位的影响是不同的。特别指出:作为逻辑运算指令之一NOT指令不影响标志位。
(3)控制标志位:用来控制CPU的操作,由程序设置或清除。
■
(1)代码段寄存器CS存储程序当前使用的代码段的段地址。代码段用来存放程序的指令代码。下一条要读取指令在代码段中的偏移地址由指令指针寄存器IP提供;
(2)数据段寄存器DS用来存放程序当前使用的数据段的段地址。一般来说,程序中所用到的原始数据、中间结果以及最终结果都存放在数据段中,如果程序中使用了字符串处理指令,则源字符串也存放在数据段中;
(3)堆栈段寄存器SS用来存放程序当前所使用的堆栈段的段地址。堆栈是在存储器中开辟的一个特定区域;
(4)附加数据段寄存器ES用来存放程序当前使用的附加数据段的段地址。附加数据段通常用于存放字符串操作时的目的字符串。
■
(1)所有通用寄存器可以出现在符合寻址要求的指令中(传送类、算术类、逻辑类、移位类、甚至转移类指令),例如:"MOV BX,[BX+SI]"、"JMP SP"、"CALL [BP+DI]"等;
(2)段寄存器只能出现在合理的MOV、PUSH和POP指令中,例如:"MOV DS,SP"、"PUSH SS"、"POP ES"等;
(3)指令指针寄存器IP不出现在任何指令中。不能直接用赋值指令对IP内容进行修改。程序顺序执行时IP随取指过程自动加1,非顺序执行时按相应的转移、子程序调用或中断调用、子程序返回或中断返回操作结果修改IP。
(4)标志寄存器FLAGS也不直接出现在指令中。除了相应标志位可单独位操作、或受绝大部分算术、逻辑、移位运算的影响、或被条件转移指令引用外,还有LAHF、SAHF、POPF、PUSHF指令会隐含访问标志寄存器。