乘法、除法的運用 — 組合語言筆記

乘除的時候都會用到特定的暫存器,所以這點要特別注意。

Sharon Peng
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) 有號數的除法

範例:

--

--

Sharon Peng
Sharon Peng

No responses yet