兩個相乘數,要麼都是8位,要麼都是16位。 8位乘法,16位乘法。
如果是8位,乙個數字預設存放在al中,另外乙個數字存放在其他8位暫存器中或者位元組型記憶體單元中。
mul 8位暫存器 ;結果存放在ax中
mul byte ptr ds:[0] ;結果存放在ax中
如果是16位,乙個數字預設存放在ax中,另外乙個數字存放在其他16位暫存器中或者字型記憶體單元中。
mul 16位暫存器 ;結果存放在dx, ax中
mul word ptr ds:[0] ;結果存放在dx, ax中
結果: 8位乘法,得到乙個16位數, 結果存放在ax中
16位乘法,得到乙個32位數, 低16位存放在ax中,高16位存放在dx中
assume cs:code, ds:data, ss:stack
data segment
dd 0
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov di, 0
call init_reg
mov bx, 5 ; 引數
call get_cube ; 對引數進行處理
mov es:[di+0], ax ;call程式的返回值
mov es:[di+2], dx
mov ax, 4c00h
int 21h
;******************************== 切割邏輯
get_cube: push bx
mov ax, bx
mul bx
mul bx
pop bx
ret;******************************===
init_reg: mov ax, data
mov ds, ax
mov es, ax
retcode ends
end start
assume cs:code, ds:data, ss:stack
data segment
dw 11,22,33,44,55,66,77,88
dd 0,0,0,0,0,0,0,0
data ends
stack segment stack
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
call init_reg
call number_cube
mov ax, 4c00h
int 21h
;******************************==
number_cube:
mov cx, 8
mov si, 0
mov di, 16
cube: mov bx, ds:[si]
call get_cube
mov es:[di], ax
mov es:[di+2], dx
add si, 2
add di, 4
loop cube
ret;******************************== 切割邏輯
get_cube: push bx
mov ax, bx
mul bx
mul bx
pop bx
ret;******************************===
init_reg: mov ax, data
mov ds, ax
mov es, ax
retcode ends
end start
80X86彙編 mul 乘法指令
使用 mul 做乘法的時候,注意以下兩點 格式如下 mul reg mul 記憶體單元記憶體單元可以用不同的定址方式給出,比如 mul byte ptr ds 0 含義 ax al ds 16 0 mul word ptr bx si 8 含義 ax ax ds 16 bx si 8 的結果的低 1...
組合語言mul指令 跟著開源軟體學組合語言 計算器
今天我們分享兩個關於計算器的開源軟體,這兩個開源軟體都是用組合語言編寫,學習這兩個軟體有助於我們理解相關的指令和資料轉換的方法。rdebug的計算器 第乙個開源軟體來自rdebug的部落格 這個計算器軟體完全使用彙編編寫,執行在dos下。執行效果如下 這個軟體沒有依賴第三方庫,僅使用了dos中斷用於...
乘法 除法彙編指令總結
乘法指令的反彙編 a 5 imul eax,dword ptr a 5 當變數與不是 2的冪的數相乘時,三變數 a b mov eax,dword ptr a imul eax,dword ptr b 當兩個都是變數相乘時,兩變數 a 8 mov eax,dword ptr a 當變數與 2的冪相乘...