汇编中寄存器及其用处

寄存器图组

1. 通用寄存器

数据寄存器 用处
AX(accumulator) 作为 累加器 用,它是算数运算的主要寄存器。另外,所有的I/O指令都使用这一寄存器与外部设备传送信息
BX(base) 计算机存储器地址时,经常作为寄存器
CX(count) 在位移、循环和串处理指令中常用来做保存计数值
DX(data) 一般在做双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位;对某些I/O操作,DX可用来存放I/O的端口地址

指针寄存器 用处
SP(stack pointer)、ESP 堆栈指针寄存器,其中存放当前堆栈段栈顶的偏移量,他们总是与SS堆栈段寄存器配合存取堆栈中的数据。实模式下使用SP,在80386以上的保护模式下使用ESP
BP(base pointer)、EPB 基址指针寄存器。它可以与堆栈段寄存器SS联用来确定堆栈段中的吗某一存储单元的地址。并可以作堆栈区中的一个基地址以便访问堆栈中的信息。

变址寄存器 作用
SI(source index) 源变址寄存器 DI(destination index) 目的变址寄存器 一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能。

SP、ESP堆栈指针不能随意修改


2. 控制寄存器


指令指针寄存器

IP、EIP叫做指令指针寄存器,它总是与CS段寄存器配合指出下一条要执行指令的地址,其中存放偏移量部分。计算机用指令指针寄存器来控制指令序列的执行流程。


标志寄存器

运算结果特征标志 用处
CF(Carry Flag) 进位标志,记录运算结果的最高位向前产生的进位或借位。可用于检测无符号数二进制加减法运算时是否发生溢出(溢出时 CF=1)
PF(Parity Flag) 奇偶标志,记录运算结果最低位中含1的个数是奇还是偶。可用于检测数据传送过程中是否发生错误。
AF(Auxiliary carry) 辅助进位标志,记录运算结果低4位向前产生的进位或借位。只有在执行十进制运算指令时才关心此位。
ZF(Zero Flag) 零标志,记录运算结果是否位0。结果为0则置1,否则清0
OF(Overflow Flag) 溢出标志,记录运算结果是否超出了机器所能表示的范围。可用于检测带符号数运算时是否发生溢出(溢出时OF=1)
SF(Sign Flag) 符号标志,记录运算结果的符号。结果为负则置1,否则清0

控制标志(处理器) 用处
IF(Interrupt Flag) 中断允许标志,IF的控制只对外部可屏蔽中断请求(INTR)起作用。当IF=1时允许CPU响应INTR。
DF(Direction Flag) 方向标志。专服务于字符串操作指令,当DF位为1时,每次操作后使变址寄存器SI和DI减小,这样就使串处理从高地址向低地址方向处理。当DF位为0时,则使SI和DI增大。
TF(Trap Flag) 陷阱标志,用于程序调试。当TF=1 时,CPU处于单步方式;当TF=0时,CPU处于连续方式。
IOPL(I/O Privilege Level) 特权标志,占D13和D12两位。在保护模式下,用于控制对I/O地址空间的访问。只对80286以上CPU有效。
ID(Identification) 标识标志,若ID=1,则表示Pentium支持CPUID指令。只对Pentium以上CPU有效。

DEBUG中测试位的表示符号


3.段寄存器


IBM PC机的存储器采用分段管理方法组织,因此一个物理地址用段基址和偏移量 表示。
段寄存器存放段基址。在实模式下存放当前正在运行程序的段基地址,在保护模式下存放段选择子。


寄存器图组


段寄存器 用处
CS(code segment) 代码段寄存器,指定当前代码段,代码段中存放当前正在运行的程序段。
SS(stack segment) 指定当前堆栈段。
DS(data segment) 数据段寄存器,指定当前运行程序所使用的数据段。
ES(extra segment) 附加数据段寄存器,指定当前运行程序所使用的附加数据段

DS是主要的数据段寄存器,在默认情况下使用DS所指向段的数据。若要引用其它段中的数据,需要显式说明。

posted @ 2018-03-21 09:42  DismalSnail  阅读(1808)  评论(0编辑  收藏  举报