版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
</div>
<!--一个博主专栏付费入口-->
<!--一个博主专栏付费入口结束-->
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
<div class="htmledit_views" id="content_views">
<p class="cye-lm-tag">两个相乘数,要么都是8位,要么都是16位。 8位乘法,16位乘法。</p>
如果是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中
注意:有时候虽然是字的乘法,但是已经明确地知道乘积比较小,肯定不会大于2^16=65536,那么此时,虽然是字乘法,可能就用不到乘积的高16位(在dx中)了,而只是对乘积的低16位进行处理(在ax中)。
-
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
-
ret
-
-
code 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
-
ret
-
-
code ends
-
-
end
start
-