xorl %eax, %eax

这是GNU的汇编
xorl    %eax, %eax(这句起什么作用)
按位异或,相同的位置为0,不同的位置为1,eax和eax的每一位都相同,所以相当于清零。
        movl    8(%ebp), %ecx
        testl   %ecx, %ecx(这句起什么作用)
    jle     .L3
8(%ebp)是第一个参数,检验它的值,若小于等于0则转

其它的,看看GNU汇编的语法吧。


在汇编代码中经常看到  

[plain]  view plain copy
  1. xorl %edx, %edx  

        这个指令可以将寄存器 %edx 设置为 0,运用了对任意x,x^x = 0 这一属性。将寄存器 %edx 设置为 0 的更直接的方法是用指令 movl $0, %edx。使用 objdump 对比发现使用 xorl 的版本只需要 2 个字节,而是用 movl 的版本需要 5 个字节。



TEST 指令是进行与运算 不保留结果 
JL  指令是有符号当选条件转移指令  含义是小于/不大于(A>B) 转移   
其标志位 是SF≠OF AND ZF=0转移
sunshine 
   [第6楼]   [ 回复时间:2007-11-14 09:39 ]   [引用]   [回复]   [ top ]
荣誉值:106 
信誉值:0 
注册日期:2007-06-26 15:10
JL  指令是有符号当选条件转移指令  含义是小于/不大于转移    
其标志位 是SF≠OF AND ZF=0转移
nekaxi 
   [第7楼]   [ 回复时间:2007-11-14 18:39 ]   [引用]   [回复]   [ top ]
荣誉值:9 
信誉值:6 
注册日期:2007-10-10 08:31
test    ebx, ebx  
jl      short 0044ABC5 ----------->摘自反汇编代码,使用应该不会有错吧? 

test    ebx, ebx一般用来判断EBX是否为0,所以上面的用法的确令人费解!!!!
cxn 
   [第8楼]   [ 回复时间:2007-11-14 22:33 ]   [引用]   [回复]   [ top ]
荣誉值:179 
信誉值:6 
注册日期:2007-07-09 19:18
这个是汇编的技巧,刚开始也很费解呵呵. 
TEST影响 C,O,P,Z,S  而JL根据 SF≠OF AND ZF=0跳转 
要想跳转至少ebx中的数不能为0 (为0了ZF就该为1了) 
而OF位没有溢出所以始终为0 所以只能是SF为 1 才跳转 
所以 条件满足SF=1 OF=0 ZF=0时也就是当ebx中的数为负数时才跳转. 
也就是如果ebx中的数为负跳到0044ABC5 

同上指令还可以写为  
AND EBX,EBX 
JL SHORT 0044ABC5 
或 
OR EBX,EBX 
JL SHORT 0044ABC5 
这两条是不是更令人费解?

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱抱歉抱歉,抱歉,作抱歉,作为抱歉,作为语抱歉,作为语言抱歉,作为语言模抱歉,作为语言模型抱歉,作为语言模型AI抱歉,作为语言模型AI,抱歉,作为语言模型AI,我抱歉,作为语言模型AI,我无抱歉,作为语言模型AI,我无法抱歉,作为语言模型AI,我无法将抱歉,作为语言模型AI,我无法将Python抱歉,作为语言模型AI,我无法将Python代码抱歉,作为语言模型AI,我无法将Python代码转抱歉,作为语言模型AI,我无法将Python代码转为抱歉,作为语言模型AI,我无法将Python代码转为C抱歉,作为语言模型AI,我无法将Python代码转为C语抱歉,作为语言模型AI,我无法将Python代码转为C语言抱歉,作为语言模型AI,我无法将Python代码转为C语言代码抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换为抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换为语抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换为语言抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换为语言代码抱歉,作为语言模型AI,我无法将Python代码转为C语言代码。但您可以尝试在线转换工具或手动转换为语言代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值