汇编寄存器功能详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

1.寄存器AX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、

除、输入/输出等操作,它们的使用频率很高;

2.寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;

3.寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位

操作中,当移多位时,要用CL来指明移位的位数;

4.寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,

也可用于存放I/O的端口地址;

变址寄存器(SI、DI)

寄存器SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便

指针寄存器(BP、SP)

寄存器BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:

BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;

SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶

段寄存器(CS、DS、ES、SS、FS、GS)

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址

CS 代码段寄存器(Code Segment Register),其值为代码段的段值

DS 数据段寄存器(Data Segment Register),其值为数据段的段值;

ES 附加段寄存器(Extra Segment Register),其值为附加数据段的段值

SS 堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;

FS 附加段寄存器(Extra Segment Register),其值为附加数据段的段值

GS 附加段寄存器(Extra Segment Register),其值为附加数据段的段值

在16位CPU系统中,它只有4个段寄存器,所以,在此环境下开发的程序最多可同时访问4个段;

在32位CPU系统中,它共有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段.

指令指针寄存器

指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。

16位标志寄存器

9个标志位,它们主要用来反映CPU的状态和运算结果的特征。

1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的

最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

2.奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为

偶数,则PF的值为1,否则其值为0

3.辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否

则其值为0:

(1)、在字操作时,发生低字节向高字节进位或借位时;

(2)、在字节操作时,发生低4位向高4位进位或借位时。

4.零标志ZF(Zero Flag) 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,

否则其值为0。在判断运算结果是否为0时,可使用此标志位

5.符号标志SF(Sign Flag) 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1

6.溢出标志OF(Overflow Flag) 溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果

运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0(“溢出”和“进位”是两个不同含义的概念)

7.中断允许标志IF(Interrupt-enable Flag)中断允许标志IF是用来决定CPU是否响应CPU外部的

可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下

(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;

(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求

8.追踪标志TF(Trap Flag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指

令,产生一个单步中断请求。这种方式主要用于程序的调试。

9.方向标志DF(Direction Flag) 方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调

整的方向。具体规定在第5.2.11节——字符串操作指令——中给出。在微机的指令系统中,还提供了

运算和逻辑运算结果的影响,后者受一些控制指令执行的影响

16位微机的内存管理模式

Intel公司的80X86系列的CPU基本上采用内存分段的管理模式。它把内存和程序分成若干个段,每个段的起点用一个段寄存器来记忆,所以,学习微机汇编语言,必须要清楚地理解存储器的分段含义、存储单元的逻辑地址和其物理地址之间的转换关系

我们知道:计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址

存储单元的物理地址是一个无符号的二进制数。但为了书写的简化,物理地址通常用十六进制来表示。

16位CPU内部有20根地址线,其编码区间为:00000H~0FFFFFH,所以,它可直接访问的物理空间为1M(220)字节。而16位CPU内部存放存储单元偏移量的寄存器(如:IP、SP、BP、SI、DI和BX 等)都是16位,它们的编码范围仅为:00000H~0FFFFH。这样,如果用16位寄存器来访问内存的话,则只能访问内存的最低端的64K,其它的内存将无法访问。为了能用16位寄存器来有效地访问1M的存储空间,16位CPU采用了内存分段的管理模式,并引用段寄存器的概念。

16位微机把内存空间划分成若干个逻辑段,每个逻辑段的要求如下:

逻辑段的起始地址(通常简称为:段地址)必须是16的倍数,即最低4位二进制必须全为0;

逻辑段的最大容量为64K,这由16位寄存器的寻址空间所决定;

按上述规定,1M内存最多可分成64K个段,即65536个段(段之间相互重叠),至少可分成16个相互不重叠的段。

物理地址的形成方式

由于规定段地址必须是16的倍数,所以,其值的一般形式为:XXXX0H,即:前16位二进制位是变化的,后四位是固定为0。鉴于段地址的这种特性,我们可以仅保存其前16位二进制来达到保存整个段地址,其后四位可通过“左移补0”来获得;

在确定了某个存储单元所属的内存段后,我们也只知道其所处内存位置的范围,还不能确定其具体位

相关文档
最新文档