汇编学习笔记[1]:寄存器

来源:互联网 发布:apache jakarta是什么 编辑:程序博客网 时间:2024/05/29 21:17

 

前面还有一些进制转换等基础知识及数在机器中的表示,这里就不记录了。

 

一、8086/8088寄存器组(14个16位寄存器,8个8位寄存器)

jichunqi

 

jichunqi1

 

1. 通用寄存器

包括数据寄存器,指针寄存器和谈起寄存器。均可用于传送和暂存数据,可以保存自述逻辑去处中的操作数和运算结果。

1)数据寄存器(可拆成高8位的H和低8位的L)

AX:可拆成高8位的AH和低8位的AL,又把AX和AL叫累加器。通过累加器进行计算可节省时间。

BX:又称基址寄存器。唯一可作为储存器指针使用的数据寄存器。

CX:一般字符串操作,或循环操作中用来控制循环次数。CL可用来控制移位。

DX:一般做32位乘除法时,存放被除数,或保留余数。

2)变址和指针寄存器

主要用于存放某个存储单元的地址的偏移,或某组单元起始地址的偏移。

DI,SI:主要用于字符串操作,DI是基地址,SI目的地址。

SP:保存堆栈指针的栈顶。

BP:某段开始位置地址的偏移。

2. 段寄存器

实现寻址1M字节物理地址空间。

3. 控制寄存器

1)指令指针

IP,16位,永远指向下一条指令

给出接着要执行的指令在代码段中的偏移

2)标志寄存器(8个标志)

1514131211109876543210    OFDFIFTFSFZF AF PF CF

CF:进位标志,运算结果是否产生进位或者借位

ZF:零标志,运算结果是否为0,如果结果为0则ZF=1,否则ZF=0

SF:符号标志,反映运算结果的符号位,与运算结果的最高位相同,如果运算结果的最高位为1,则SF=1,否则SF=0

OF:溢出标志,反映有符号数加减运算是否引出溢出。如果运算结果>127或<-128(8位),或>32767或<-32768则溢出,若溢出OF=1,否则OF=0

PF:奇偶标志,反映运算结果中“1”的个数,如果“1”的个数为偶数,则PF=1,否则PF=0

AF:辅助进位标志,在字符操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字节进位或借位,则AF=1,否则AF=0

DF:方向标志,决定着串操作指令执行时有关指针寄存器调整方向。DF=1按减方式;DF=0按加方式

IF:中断允许标志,决定CPU是否响应外部可屏蔽中断请求,IF=1可响应;IF=0不可响应

TF:追踪标志,TF=1CPU进入单步方式,主要用于程序的调试。

二、存储器分段和地址的形成

1.存储单元的地址和内容

在存储器里以节节为单位存储信息。

每一个字节单元给以一个存储器的地址。

地址为0开始,顺序地每次加1

字单元的地址采用它的低地址来表示!

如(0004H)=34H,(0005H)=12H,那么(0004H)的字单元的内容为1234H。

2. 存储器地址的分段及物理地址的形成

在16位字长的机器里采用存储器地址分段的方法来提供20位地址。

段与段之间可相连,可以相离,还可以重叠。

在16进制表示的地址中,最低为0(即20位地址的低4位为0)

1M地址空间有20位物理地址=低4位为零的段首地址+偏移

如16表示的逻辑地址1234:3456的物理地址:12340+3456=15796H

3. 段地址的引用

在取指令的时候,自动引用代码段寄存器CS,再加上由IP给出的偏移,得到物理地址 

当涉及到一个堆栈操作时,则自动引用堆栈寄存器SS,再加上SP所给出的偏移,得到堆栈操作所需要的物理地址。

当偏移涉及BP寄存器时,缺少引用段寄存器SS

在存取一个普通存储器操作数时,则自动选择数据寄存器DS或附加段寄存器ES,再加上偏移,得到物理地址。

在不改变段寄存器值的情况下,寻址最大范围为64K

允许段跨越前缀。

这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处

 

原创粉丝点击