和求余运算巧妙结合的jns指令

 

.text:004A78B1    and eax, 80000001h
.text:004A78B6    jns short loc_4A78BD
.text:004A78B8    dec eax
.text:004A78B9    or eax, 0FFFFFFFEh
.text:004A78BC    inc eax
.text:004A78BD
.text:004A78BD  loc_4A78BD:
.text:004A78BD    jnz short loc_4A78D9

当你看到这段代码,它是什么意思呢?

我曾经在看雪的帖子上看到过相当好的解释,可是现在找不到了,很遗憾

那么只好自己记录下

阅读下面代码,你就懂得它的含义

18:             if(i%2 == 0)
0041147C 8B 45 F8        mov eax,dword ptr [i]
0041147F 25 01 00 00 80    and eax,80000001h
00411484 79 05         jns main+6Bh (41148Bh)
00411486 48            dec eax
00411487 83 C8 FE        or eax,0FFFFFFFEh
0041148A 40            inc eax
0041148B 85 C0         test eax,eax
0041148D 75 19         jne main+88h (4114A8h)
19:             {
20:
21:                  count++;
0041148F A1 9C 90 41 00    mov eax,dword ptr [count]
00411494 83 C0 01        add eax,1
00411497 A3 9C 90 41 00      mov dword ptr [count],eax
22:                sum += count;
0041149C 8B 45 EC        mov eax,dword ptr [sum]
0041149F 03 05 9C 90 41 00   add eax,dword ptr [count]
004114A5 89 45 EC        mov dword ptr [sum],eax
23:             }
24:               sum += count;
004114A8 8B 45 EC        mov eax,dword ptr [sum]
004114AB 03 05 A0 90 41 00   add eax,dword ptr [count]
004114B1 89 45 EC        mov dword ptr [sum],eax

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值