乘法、除法的運用 — 組合語言筆記
乘除的時候都會用到特定的暫存器,所以這點要特別注意。
3 min readDec 22, 2019
MUL & IMUL Instruction:
MUL:(unsigned multiply) 無號數的乘法
MUL reg/imm8
MUL reg/imm16
MUL reg/imm32
*乘法中會用到的Operands
*乘法中CF(Carry Flag):會被設為1,當DX不等於0(主要目的是可以了解,上半部的register的值可不可以被省略)
用範例來讓大家更了解他們:
IMUL:(signed multiply) 有號數的乘法
*這邊要注意carry flag跟overflow flag的使用,如果上半部的bit不為其下半部的延伸,則CF = 1, OF = 1
*還有一點,當我們用有號數的乘法,去操作無號數的乘法時,CF, OF不代表bit的上半部是否為全零的狀態。
例子:
DIV & IDIV Instruction:
DIV reg/imm8
DIV reg/imm16
DIV reg/imm32
*除法中會用到的Operands
DIV:(unsigned divide) 無號數的除法
範例:
*由於在除法的時候,很容易發生不夠除的狀況,所以這邊有一個方法可以把,原本的除數展開跟被除數的位數一樣大。
Signed Integer Division:
CBW: covert byte to word →AL 變成 AX
CWD: covert word to double word → AX 變成 EAX
CDQ: overt doubleword to quadword → EAX 變成 EDX:EAX
IDIV:(signed divide) 有號數的除法
範例: