以16位系统为例,5位数的范围是10000-99999,超出了16位寄存器能表达的最大值, 65535,所以,需要用双字表示,即DX:AX。最大99999 * 9 ,依然在双家的表达范围内。
; code below, z = x * y
dseg segment
x dw 84748 ; 5位数
y dw 9 ; 1位数
z dd 0 ; 双字
dseg ends
cseg segment
assume cs:cseg, ds:dseg
start:
mov ax, dseg
mov ds, ax
xor dx, dx ;dx 清0
mov ax, x
mov bx, y
mul bx ;x * y -> DX:AX
mov word ptr z, ax ;低位在前
mov word ptr z+2, dx;高位在后
mov ah,4ch
int 21h
cseg ends
end start