汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 08:28:40
![汇编语言程序设计 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号](/uploads/image/z/1738597-13-7.jpg?t=%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1+%E7%94%A816%E4%BD%8D%E4%B9%98%E6%B3%95%E6%8C%87%E4%BB%A4%E5%AE%8C%E6%88%9032%E4%BD%8D%E6%97%A0%E7%AC%A6%E5%8F%B7%E6%95%B0%E7%9A%84%E4%B9%98%E6%B3%95%EF%BC%88%E7%BB%93%E6%9E%9C64%E4%BD%8D%EF%BC%89%E4%BD%BF%E7%94%A8MUL%E6%8C%87%E4%BB%A4%2C%E5%AE%8C%E6%88%90%E5%8F%8C%E5%AD%97%E6%97%A0%E7%AC%A6%E5%8F%B7)
汇编语言程序设计 用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