我今天進行了測試,我唯一不了解的問題是將雙字轉換為四字。這讓我開始思考,為什么/何時為擴展或除法簽名?另外,什么時候使用cdq等說明?
3 回答

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
我總是在匯編中混為一談,因為我對寄存器感到困惑。我認為股息總是放在eax / ax中,而一個操作數的指令只是div / idiv ebx(或其他寄存器)。這將有效地執行eax / ebx,商在eax中,余數在edx中。我的考試顯示,在調用包含71的EAX上的idiv和包含-4的另一個寄存器之前,我們使用了cdq。為什么是這樣?我們使用了每個寄存器的全部,我不明白為什么我們需要其中一個成為四字。

四季花海
TA貢獻1811條經驗 獲得超5個贊
請閱讀答案的第一行和/或英特爾的insn參考手冊。 idiv ebx
做eax = (edx:eax)/ebx
和eax = (edx:eax)%ebx
。edx
始終是股息的高半部分,而顯式操作數始終是除數。沒有div
/ 形式idiv
會忽略edx
2和3操作數形式imul
僅產生單寄存器結果的方式。
- 3 回答
- 0 關注
- 588 瀏覽
添加回答
舉報
0/150
提交
取消