首页 > 程序人生 > 80×86汇编基础(一) 寄存器(Registers)

80×86汇编基础(一) 寄存器(Registers)

2009年11月16日 发表评论 阅读评论

写在前面,文中所写的的8086系统都指Intel 8086系统。

1. 8086 CPU基本架构
8086 CPU被归为冯.诺依曼结构,如图1所示,它主要包括三个部分:中央处理单元(CPU)、内存(Memory)和输入输出设备(I/O)。这三个单元之间通过数据总线(Data bus)互相传递数据。
80x86_cpu
2. 8086 CPU 寄存器的分类:
(1)通用寄存器(General purpose registers)
(2)特殊目的应用程序可访问寄存器(Special-purpose application accessible registers)
(3)段寄存器(Segment registers)
(4)特殊目的的内核模式寄存器(Special-purpose kernel mode registers)
另外,可以将(2)和(4)合为同一类叫做特殊目的寄存器(Special-purpose registers)

3.8086中的通用寄存器(General purpose registers)
如图2所示为8086中的24个通用寄存器:
general_registers
这24个寄存器分别为:
(1)8个32位寄存器:EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
(2)8个16位寄存器:AX(Accumulator ), BX(Base), CX(Count ), DX(Data ), SI(Source Index), DI(Destination Index), BP(Base Pointer), SP(Stack Pointer)
(3)8个8位寄存器:AL, AH, BL, BH, CL, CH, DL, DH
这里需要注意的是,这24个通用寄存器并不是单独存在的,从图2中可以看出,32位寄存器与对应的16位寄存器重叠,16位寄存器又与对应的两个8位寄存器重叠。所以修改寄存器值的时候需要注意,有可能修改一个寄存器的值的时候,同里改了其它三个寄存器的值。

4.8086中的段寄存器(Segment registers)
8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。
(1)代码段寄存器CS(Code segment):存放当前执行的程序的段地址。
(2)数据段寄存器DS(Data segment):存放当前执行的程序所用操作数的段地址。
(3)堆栈段寄存器SS(Stack segment):存放当前执行的程序所用堆栈的段地址。
(4)附加段寄存器ES(Extra segment):存放当前执行程序中一个辅助数据段的段地址。

5.8086中的特殊目的寄存器(Special-purpose registers)
8086中有几个特殊目的专用的寄存器,不能随便使用。
(1)SP/ESP 栈寄存器,它用来存放栈中栈顶地址偏移量,它与SS一起可以计算栈顶物理地址。
(2)BP/EBP 基寄存器,指向栈中的数据,可以与SS一起来计算数据的的物理地址。
(3)IP 指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。
(4)EFLAGS寄存器,一个包含用9个1-bit flag的16位寄存器,具体见图3.
EFLAGS
其中:
a. OF(Overflow Flag)在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0
b. DF(Direction Flag) 在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理
c. IF(Interrupt-enable Flag) 用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断
d. TF(Single-step Flag ) 用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱( if set then single-step interrupt will occur after the next instruction.)
e. (Sign Flag) 记录运算结果的符号。结果为负时置1,否则置0
f. (Zero Flag) 运算结果为0时ZF位置1,否则置0
g. (Auxiliary carry Flag) 记录运算时第3位(半个字节)产生的进位值(set if there was a carry from or borrow to bits 0-3 in the AL register.)
h. (Parity Flag) 用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0
i. (Carry Flag ) 记录运算时最高有效位产生的进位值

6.8086中寄存器对应使用的关系
在8086中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,如图4所示:
reg

7.参考内容:
(1) Registers of the 8086 Microprocessor, http://mcs.uwsuper.edu/sb/324/Intro/8086.html
(2) Intel 8086 microprocessor architecture, http://www.cpu-world.com/Arch/8086.html
(3) 《汇编语言程序设计》,http://comic.sjtu.edu.cn/thucs/GD_jsj_019b/text/catalog.htm
(4) 《The Art of Assembly Language》

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.