寄存器

一、数据寄存器

(AX、BX、CX、DX寄存器)

• AX寄存器称为累加器(Accumulator),使用时主要用于存放数据,如存放算术、逻辑运算中的操作数或结果。也可临时时用于存放地址。
• BX寄存器称为基址寄存器(BaseRegister),常用来存放访问存储器时的地址。
• CX寄存器称为计数寄存器(CountRegister),常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。
• DX寄存器称为数据寄存器(DataRegister),常用于数据传递。在寄存器间接寻址中的I/O指令中存放I/O端口的地址。
AX、BX、CX、DX每个寄存器可以将高、低8位分别作为独立的8位寄存器使用。其中的高8位用AH、BH、CH、DH表示,低8位用AL、BL、CL、DL表示。

二、变址寄存器

(SI寄存器、DI寄存器)
• SI是源变址寄存器,DI是目的变址寄存器。一般用来存放地址偏移,也可以用来存放数据。
但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目的串地址,默认在ES中;此时不能混用。

1
2
3
4
5
mov ax,1000H
mov ds,ax
mov si,2
mov ax,[si] ! ds:si = 1000H + 2

即把ds偏移2位置数据取出赋值给ax。

三、指针寄存器

(BP寄存器、SP寄存器)
• SP(stack pointer)堆栈寄存器,SP寄存器存放栈的偏移地址。
• BP(base pointer)基数指针寄存器BP,它的用途有点特殊,需和堆栈指针SP联合使用的,作为SP校准使用的,只有在
• 寻找堆栈里的数据和使用个别的寻址方式时候才能用到

1
2
3
4
5
6
7
8
9
10
11
12
在函数进入时:
push bp !! 保存BP指针
mov bp,sp !! 将SP指针传给BP,此时BP指向SP的基地址。
!! 这个时候,如果该函数有参数,则[bp + 2*4]是该子函数的第一个参数;
!! [bp+3*4]是该子函数的第二个参数,以此类推,有多少个参数则[bp+(n-1)*4]。
.....
.....
函数结束时:
mov sp,bp !! 将原sp指针传回给sp
pop bp !! 恢复原bp的值。
ret !! 退出子函数


栈
入栈

四、段寄存器

• 代码段寄存器(code segment):CS
存放当前正在运行的程序代码所在段的段地址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移地址则有IP(指令指针寄存器)提供
• 数据段寄存器(data segment):DS
指出当前程序使用的数据所存放段的最低地址,即存放数据段的段地址;
• 栈段寄存器(stack segment):SS
指出当前栈的底部地址,即存放堆栈段的段地址。SS:SP指向栈顶单元
• 附加段数据寄存器(extra segment):ES
指出当前程序使用附加数据段的段地址,该段是串操作指令中目的串所在的段。

五、标志寄存器

CPU内部的寄存器中,有一种特殊的寄存器(对于不同的CPU可能其构造和数量均不同),其主要有三中作用:

1. 用来存储相关指令的某些执行结果
2. 用来为CPU执行相关指令提供行为依据
3. 用来控制CPU的相关工作方式

这种寄存器在我们8086CPU中被称为标志寄存器。8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW),与其他寄存器不同的是,其他寄存器都是整个寄存器用来存放特定具数据,而标志寄存器则是按照每一位来记录特定信息。

1. ZF-零标志

它主要是用来记录相关指令执行后,其结果是否为o,如果结果为0则zf = 1,否则为zf=0。
NZ代表当前结果值1,ZR代表当前结果值为0。

2. PF-奇偶标志

奇偶标志位,它负责记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数,如果1的个数为偶数则PF=1。
P0代表奇数,PE代表偶数。

3. SF-符号标志

flag寄存器的第七位是符号标志位,它用来标志程序的运行结果是否为负,若为负则sf=1,反之为0。
NC代表整数,CY代表负数。

4. CF-进位标志(无符号进位标志)

用来标识无符号计算时运算结果向更高位进位(或借位)的状态。
CY(1)表示有进位,NC(0)表示无进位。

5. OF-溢出(有符号进位标志)

它的作用是记录有符号运算时的溢出情况。
OV(1)表示有溢出,NV(0)表示无溢出。

6. DF-方向标志

DF标志称为方向标志位,其作用就是我们在进行串操作的时候进行SI,DI的递减,如果df=UP(0)则每次操作后si,递增;如果df=DN(1),每次操作后si,di递减。
UP(0)表示SI递增;DN(1)表示SI递减。

7. IF-中断标志

决定CPU是否响应外部可屏蔽中断请求。
IF为EI(1)时,CPU允许响应外部的可屏蔽中断请求。
IF为DI(0)时,CPU禁止响应外部的可屏蔽中断请求。

8. TF-跟踪标志

跟踪标志:当TF被设置为1时,CPU进入单步模式,所谓单步模式就是CPU在每执行一步指令后都产生一个单步中
断。主要用于程序的调试。8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。

9. AF-辅助进位标志

辅助进位标志:算数操作结果的第三位(从O开始计数)如果产生了进位或者借位则将其置为AC(1),否则置为NA(0),常在BCD(binary-codedecimal)算术运算中被使用。

标志位


本文作者: Alone
本文链接: https://blog.nosecurity.cn/posts/12438.html
版权声明: 本博客所有文章除特别声明外,均为原创,采用 CC BY-SA 4.0 协议 ,转载请注明出处!