日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反汇编基础-乘法与除法

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反汇编基础-乘法与除法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先來看乘法:

兩個變量之積

int nOne = 1;int nTwo = 2;int nOther = nOne * nTwo;

其反匯編如下:

從這里可以看到,兩個變量之乘積,

把nOne中的值放到ptr指向的地方,把2放到ptr指向的地址;把nOne的值給eax

imul就是乘積,最后再把eax乘積的值放到nOther中。

?

下面是一個變量的值乘一個常量:

代碼如下:

nOther = nOne * 3;

反匯編如下:

這里可以知道把nOne的值放到eax中,然后把常量3直接和eax相乘;

?

下面是一個變量和2的倍數相乘:

nOther = nOne * 2;

反匯編如下:

這里的shl是邏輯左移,這個效率比imul高,這個邏輯左移和C/C++中的<<一樣;

int nOne = 10;int nTwo = 2;int nOther = nOne / nTwo;nOther = nOne / 2;nOther = nOne / 3;nOther = (-nOne) / 2;nOther = nOne / -2;

這里先介紹這個指令:

cdq:把EAX(32位)和EDX(32位)拼湊在一起:

EDX為高位,EAX為低位;如果EAX為正數則用0填充EDX,如果為負數就用1填充EDX;

cdq經常與idiv除法指令同時出現:

除法一般要用到兩個寄存器,一個低位,一個高位,低位放商,高位放余數;

?

sar指令是邏輯右移,相當與C/C++中的 >>?

?

neg為補碼操作符

?

當除以2的倍數時,也會向乘法英語進行優化

?

如下匯編代碼:

這里要說明下為什么有的會存在

為什么要在邏輯右移的操作上要進行一個減法操作!

負數是通過補碼進行計算的!
比如-3
如果直接右移他的結果就是-2;在前面進行一個sub就是為了得到正確的結果

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的反汇编基础-乘法与除法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。