算法

1、xor eax,eax

常见用法

0041000 call [0041100]

0041006 je 042000

......

0041100 ......   //call 调用的子函数 start

......

0041120 xor eax,eax

0041122 retn  //call end

说明:(1)0041120 xor eax,eax 这句的作用是把eax赋0(使得call函数的返回值为0),同时把ZF标志位置1,

所以,0041006 je 042000 这句的跳转会实现。

(2)如果是or的话,eax的值不变,同时把ZF标志位置0。

 

2、test检测位指令

test是把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果,所以,不会改变指令中的操作数。在该指令后,通常用JE、JNE、JZ和JNZ等条件转移指令。

指令的格式:TEST  Reg/Mem, Reg/Mem/Imm

受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

call XXXXXXXX
test al,al/eax,eax...
je/jne...

 

3、汇编语言中,CXECX只能递减,所以,循环计数器只能从大到小。在程序中,必须先把循环次数赋给循环计数器。

发布了36 篇原创文章 · 获赞 6 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章