汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 00:06:49
汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号
汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号
汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号
data segment
first dw ,;第一个成数,低位在前,高位在后
second dw ,;同上
result dw 0,0,0,0 ;结果,低位在前,高位在后
LFLS dw ,;first低位*second低位,结果
HFLS dw ,;first高位*second低位,结果
LFHS dw ,;first低位*second高位
HFHS dw ,;高位*高位
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,[first+0] ;获取first低位,+0可以省略,此处加0突出低位
mov bx,[second+0] ;同上
mul bx
mov [LFLS+0],ax
mov [LFLS+2],dx ;存取低位*低位的结果.下同,不再写了
mov ax,[first+2] ;
mov bx,[second+0] ;同上
mul bx
mov [HFLS+0],ax
mov [HFLS+2],dx ;存取高位*低位的结果.下同,不再写了
mov ax,[first+0] ;
mov bx,[second+2] ;同上
mul bx
mov [LFHS+0],ax
mov [LFHS+2],dx ;
mov ax,[first+2] ;
mov bx,[second+2] ;同上
mul bx
mov [HFHS+0],ax
mov [HFHS+2],dx ;
mov ax,[LFLS+0]
mov [result+0],AX ;结果的低位
mov ax,[LFLS+2]
add ax,[HFLS+0]
jnc next1
inc word ptr [result+4]
next1:add ax,[LFHS+0]
jnc next2
inc word ptr [result+4]
next2:mov [result+2],ax
mov ax,[HFLS+2]
add ax,[LFHS+2]
jnc next3
inc word ptr [result+6]
next3:add ax,[HFHS+0]
jnc next4
inc word ptr [result+6]
next4:add ax,[result+4] ;以前的进位
jnc next5
inc word ptr [result+6]
next5:mov [result+4],ax
mov ax,[HFHS+2]
add ax,[result+6]
mov [result+6],ax
mov ax,4c00h
int 21h
code ends
end start