寄存器
通用寄存器
数据寄存器
16位寄存器:ax,bx,cx,dx
每一个寄存器可以分为高8位和低8位,al,ah,ba,bh…分别使用
习惯用法:
ax:累加器
bx:基址寄存器,寻址时存放基地址
cx:计数寄存器,循环时作为计数器
dx:数据寄存器,辅助ax存放较大的数
地址寄存器
16位寄存器:si,di,sp,dp
多用来作为数组下标使用
段寄存器
16位寄存器:cs,ss,ds,es
cs:代码段的地址
ss:堆栈段的地址
ds:数据段的地址
es:附加段的地址,用来编程时候自己标记段的位置
控制寄存器
ip:指向需要运行的下一条指令的偏移地址,cs:ip组成下一条指令的地址
fl:标志寄存器,16位但是只用到9位
每一位的值只有0或者1,每一次运算都会更新(add sub mul div )但是inc和dnc不影响
这个较为重要
寄存器符号 | 名称 | 意义 | 指令 |
---|---|---|---|
of(overflow flag) | 溢出标志位 | 只在符号数运算时有意义,正数相加为负数,负数相加为正数则溢出,一正一负相加不溢出;正数减负数为负数,负数减正数为正数溢出,溢出为1,否则为0,只对符号数结果有意义 | jo表示of=1跳,jno表示of=0跳 |
sf(sign flag) | 符号标志位 | 运算结果的首位,负数则为1,只对符号数结果有意义 | js表示sf=1时跳,jns表示sf=0时跳 |
zf(zero flag) | 零标志位 | 运算结果为0时zf=1;否则zf=0 | jz表示zf=1跳,jnz表示zf=0时跳 |
cf(carry flag) | 进位标志位 | 运算最高位产生借位或者进位则为1(或者说看最高位是否变化)不变则为0,只对非符号数有意义 | jc表示cf=1跳,jnc表示cf为0跳,clc表示cf赋值为0,stc表示cf赋值为1,cmc表示反转 |
af | 赋值进位标志 | 第三位是否改变 | |
pf | 奇偶标志位 | 用来为计算机运送数据时可能出现的错误提供检验,1的个数为奇则为0,为偶则为1,现在用处已经不大 | |
df(direct flag) | 方向标志 | 控制处理数据的方向,df=1,每次操作si,di增加,数据处理从高地址到低地址进行,df=0,si,di每次减少,数据处理从低地址向高地址进行 | cld,df=0;std,df=1 |
if | 中断标志 | if=1允许中断,if=0,不允许中断 | cli.if=0;sti,if=1 |
tf | 跟踪标志 | 用于调试时单步工作方式,tf=1,每条指令后都会中断,tf=0,不允许中断 |