段寄存器
ds:数据段 mov 存储单元,[偏移地址](寄存器只有bx,bp,si,di能做偏移地址)
cs:代码段 cs:ip:指向要执行的指令地址
ss:栈段 ss:sp:指向栈顶
es:附加段
注:不能直接将数据存入段寄存器,只能先将数据存入一般寄存器再由一般寄存器到段寄存器
变址寄存器
ip:指令指针,与cs一起用
sp:栈指针,与ss一起用
bp:基址指针,段地址默认在ss
si:源变址,与ds一起用
di:目的变址,与ds一起用
数据寄存器(运算数据的保存,下面列出的是其特定功能)
ax:累加器
bx:偏移地址
cx:计数器
dx:I/O端口地址
每个寄存器实质上是两个8位寄存器,如ax=al+ah
标志寄存器
ZF:zero falg零标志位,判断运算结果是否为0,ZF=1,意味着运算结果为0,ZF=0,意味着运算结果为1
PF:奇偶标志位,判断运算结果1的个数是否为偶数
SF:sign flag符号标志位,判断运算结果是否为负,对象是有符号数
CF:carry flag进位标志位,判断是否有进位,对象是无符号数
OF:over flag溢出标志位,判断是否有溢出,对象是有符号数
DF:direction flag方向标志位,判断是否增加偏移量,一般与串传送一起用
TF:调试标志位,判断是否单步执行
IF:中断允许标志位,判断是否允许中断(外中断)
pushf,popf:将标志寄存器的值入栈,出栈
如何分辨指令和数据,看寄存器指向的地址
物理地址=段地址*16+偏移地址
物理地址是20位的,但是由于总线宽度为16,所以用段地址*16即左移4位补0就变成20位了