在学习16位汇编指令之前我们先来了解下汇编语言的特征:
汇编语言特点:与机器相关,执行效率高,调试复杂。
汇编语言优缺点:汇编语言和高级语言混合编写,形成互补。
汇编语言数据表示类型:二进制(B),八进制(Q),十进制(D),十六进制(H)。
BCD编码:指用二进制来表示十进制数。
CPU资源和存储器:指通用寄存器,标志寄存器,指令寄存器。
EAX,累加
ECX,循环计数
EDX,数据寄存器
EBX,基址寄存器
ESP,栈顶
EBP,栈底
ESI,扩展源指针
EDI,扩展目的指针
EIP,指令指针
SI(16位),变址寄存器,常用于存储器寻址时提供地址,源操作数指针
DI(16位),变址寄存器,常用于存储器寻址时提供地址,目的操作数指针
Flag寄存器
进位CF,CF=1,运算结果表示有进位或者借位
零标志ZF,ZF=1,表示结果为0
符号标志SF,SF=1,运算结果最高位为1
奇偶标志PF,PF=1,运算结果最低8位1的个数为0或者偶数(奇)
溢出标志OF,OF=1,算数运算结果有溢出
辅助进位AF,AF=1,运算时有进位或借位
方向标志DF,DF=1,地址自动减少,用于串操作,控制地址变化方向
中断标志IF,IF=1,允许中断,用于控制外部可屏蔽中断是否可处理
陷阱标志TF,TF=1,处理器处于单步执行指令(处理器每执行一条指令便产生一个内部中断,可以对程序进行单步调试)
16位汇编物理地址与逻辑地址转换:逻辑地址<< 4位 + 偏移 = 物理地址(可以有多个逻辑地址)
CS(代码段),表示代码段的起始地址
SS(堆栈段),表示堆栈段的起始地址
DS(数据段),表示数据段的起始地址
ES(附加段),表示附加段的起始地址,附加段是数据段,用于数据保存,串操作指令将附加段作为其目的操作数的存放区域
段前缀CS: ;使用代码段
段前缀SS: ;使用栈段
段前缀DS: ;使用数据段
段前缀ES: ;使用附加段
默认访问DS,使用BP则访问主存(SS)
1M最多可分64K个段,最少能分16个段
8086有8个8位通用寄存器(al,ah…),8个16位通用寄存器(ax,bx…),6个状态标志(CF,ZF,SF,PF,OF,AF)和3个控制标志(DF,IF,TF),4个段寄存器,4种逻辑段,4个段前缀指令
立即数寻址,mov ah,0x01
寄存器寻址,mov ah,[bh]
直接寻址,mov AX,ES:[2000H]
寄存器间接寻址,mov AX,[SI]
寄存器相对寻址,mov AX,[DI+05]
基址变址寻址,mov AX,[BX(BP)+SI]
相对基址变址寻址,mov AX,[BX+SI+05]
段内转移也称近转移(near ptr)
段内转移也称短转移(short)
段间转移也称远转移(far ptr)