马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 剑仙十号 于 2021-7-24 15:01 编辑
标志寄存器。流程控制的反编译
学内存教程,先要学标志寄存器。
ZF, SO, OF…………
汇编。跳转指令,jle,红线表示跳转成立,白线跳转不成立。
JLE 与 JNG同义:(SF ^ OF) | ZF。
即跳转成立的条件:ZF=1 or SF!=OF。
汇编。跳转指令,jge 往上跳转。
再学习普通寄存器。ebx, ecx, edx, eax…………eax用来储存子程序的返回值。
flag(标志)寄存器共有16位
flag的1、3、5、12、13、14、 15位在8086CPU中没有使用,不具有任何含义。
0、2、4、6、
7、8、9、10、11位都具有特殊含义。
【图片1】
【图片2】
equal below above
equal == [ˈiːkwəl]
below < [bəˈlo] 由b打头的,都是重音在中间。
above > [əˈbʌv] 由a打头的,都是重音在中间。
no below >= nb
no above <= na
ZF, 它是flag 的第 6 位,是零标志位。
记录相关指令执行后,结果是否为 0,
0标志位 = 1,则两数 运算结果为0,两数相等.
0标志位 = 0,则两数 运算结果为?,两数不相等.
记住有个东西,是记录运算结果,相等 或不相等的就行了。
cmp 是比较指令,相当于减法指令,不保存减法结果。
格式:cmp eax, eax
功能:做 (eax)-(eax) 的运算,但只在ZF中保存标志结果,并不在 eax 中保存运算结果。
通过 cmp汇编指令执行后,相关标志位的变化:
cmp eax, 操作数
//根据运算结果,在ZF写入标志.
//若ZF=1(表示本次运算结果为0。)
jnz **内存地址 //(jump if 运算结果 not zero),汇编语言中的条件转移指令。
…………
…………
…………
…………
|