-
16位cpu 八个通用寄存器 指令指针IP 标志寄存器FR 段寄存器
AX BX CX DX BP SP SI DI
其中前四个又分为高八位和低八位
AX 累加器 BX 基址寄存器 CX 计数寄存器 DX 数据寄存器
BP 基址指针寄存器 SP 堆栈指针寄存器
SI 源变址寄存器 DI 目的变址寄存器
IP 指向当前需要取出的指令
FR 存储一些标志,如OF DF IF等
段寄存器 有四个 CS(代码段)DS(数据段)SS(堆栈段)ES(附加段)
-
注意!标识符有这几个
OF 结果是否溢出 溢出为1
DF 方向标志位 串操作指针调整方向
IF cpu对于内部中断以及外部不可屏蔽中断必须响应,响应外部可屏蔽中断时为1
TF 跟踪标志 TF=1 单步执行指令 原来我们的调试来自这里
SF 运算结果符号 无溢出时0表示正,溢出相反
ZF 零标志 运算结果是否为零 用的比较多
AF 辅助进位标志 主要是高低位之间进借位为1 常用
CF 无符号数是否产生进位或借位 有则为1
-
寻址方式总结
立即寻址 数据地址直接给出 例如MOV AX ,#52H 将52这个数据给AX寄存器
直接寻址 数据在内存,指令中要有偏移量 例如MOV AX,[1H] 将地址ds:[1H]的数据存到ax
寄存器寻址 操作数在寄存器中 move AX,BX 将bx寄存器值给ax
寄存器间接寻址 操作数在内存中,寄存器存储地址 move AX,[SI]将si中的值对应地址的值给ax
寄存器相对寻址 操作数在内存,地址需要基址或变址寄存器和一个偏移量 例如MOVE AX,[DI+123H] 假设DI=500H 那么操作数地址为623H
寄存器基址加变址 操作数地址需要基址寄存器和变址寄存器 move AX,[SI+DI]
相对基址加变址寻址 操作数地址需要基址,变址寄存器和一个偏移量 MOVE AX,[SI+DI+1223H]
打个比方
你要去找宝藏(数据)
直接寻址就是直接给你宝藏,寄存器寻址就是告诉你你去那个房子(寄存器)里找
这都比较直接
剩余的就是把宝藏地址写在一张纸上,直接寻址就是把纸给你,寄存器间接寻址就是把纸放在那个房子里
寄存器相对寻址就是你要去那个房子在跑1000米才给你
基址加变址就是你要去两个房子才给你纸,再变态一点,找完两个房子再跑1000米才给你纸就是相对基址加变址
附一张总结:意外忘记寄存器相对寻址了,在寄存器间接寻址下加上,要基址或变址加偏移量
仅为个人总结,有不妥之处还请指教。写得不好请指教