1flag寄存器:按位起作用的,每一位都有专门的含义。flag的1、3、5、12、13、14、15在8086CPU中没有使用。而0、2、4、6、7、8、9、10、11都有特殊的含义
1.1.ZF标志(第六位):零标志位,记录相关指令执行后,结果是否为0,如果为0,zf=1;结果不为0,zf=0
1.2.PF标志(第二位):奇偶标志位,记录相关指令执行后,结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,pf=1;如果为奇数,pf=0
1.3.SF标志(第七位):符号标志位,记录相关指令执行后,结果是否为负。如果为负,sf=1;非负,sf=0
1.4.CF标志(第0位):进位标志位,无符号运算
1.5.OF标志(第11位):记录有符号数运算的结果是否发生了溢出,如果发生溢出,of=1;如果没有,of=0
1.6.DF标志(第10位):方向标志位,控制每次操作后si、di的增减
df=0,每次操作后si、di递增
df=1,每次操作后si、di递减
2.adc指令:带进位加法运算,利用CF位上记录的进位值
adc ax,bx
(ax)=(ax)+(bx)+CF
3.sbb指令:带借位减法指令,它利用CF位上记录的借位值
sbb ax,bx
(ax)=(ax)-(bx)-CF
4.条件转移指令
4.1.je:等于则转移
4.2.jne: 不等于则转移
4.3.jb:低于则转移
4.4.jnb:不低于则转移
4.5.ja:高于则转移
4.6.jna:不高于则转移
5.movsb:执行相当于进行下面几步操作
((es)*16+(di))=((ds)*16+(si))
如果df=0:(si)=(si)+1;(di)=(di)+1
如果df=1:(si)=(si)-1;(di)=(di)-1
可以看出,movsb的功能是将ds:si指向的内存单元中的字节送入到es:di中,根据df的值,改变di,si
6.movsw:ds:si指向的内存字单元的字送入es:di中,根据df的值,将di、si增减2
这两个指令一般来说都是配合rep使用的:
rep movsb
用汇编语法来描述它的功能就是:
s:movsb
loop s
rep的作用是根据cs的值,重复执行后面的串传送指令。由于每执行一次movsb指令si和di都会递减或递增指向后一个单元或前一个单元,则rep movsb就可以循环实现(cs)个字符的传送
7. cld指令:将标志寄存器的df位置0
std指令:将标志寄存器的df位置1
8.pushf指令:将标志寄存器的值压栈
popf指令:从栈中弹出数据,送入标志寄存器中
尝试做了几道题
dll-files快两天了还没找回来
mac更新新系统后中文输入法下ida会崩。。这就很难受了
开始定计划学英语了。。。。不然真凉了