汇编程序:32位无符号数乘法

简介: 【任务】用十六位乘法指令完成三十二位无符号数乘法(结果64位),数据用下面的内存单元提供:ddata segment x1 dw 5678H x2 dw 1234H...

【任务】用十六位乘法指令完成三十二位无符号数乘法(结果64位),数据用下面的内存单元提供:

ddata segment
      x1 dw 5678H
      x2 dw 1234H
      y1 dw 0DEF0H
      y2 dw 9ABCH
      xy dw 4 dup (?)
ddata ends

其中,被乘数x=((x2)*2^16)+(x1),即x2是高16位,x1是低16位;乘数y=((y2)*2^16)+(y1),即y2是高16位,y1是低16位。
【分析】
将把32位的被乘数的乘法分别分割成2个16位的数,分别对其进行16位的乘法,然后将得到的4个16位乘法的乘积,按照各自的位相加的最终乘积,如下图:
这里写图片描述
【参考解答】

assume cs:ccode, ds:ddata
ddata segment
      x1 dw 5678H
      x2 dw 1234H
      y1 dw 0DEF0H
      y2 dw 9ABCH
      xy dw 4 dup (?)
ddata ends
ccode segment
start:mov ax,ddata
      mov ds,ax

      mov ax,x1
      mov dx,y1
      mul dx
      mov [xy],ax
      mov [xy+2],dx     ;被乘数低位4字符x1和乘数低位4字符y1相乘结果低位存入xy,高位存入xy+2

      mov ax,x2
      mov dx,y1
      mul dx
      add [xy+2],ax
      adc [xy+4],dx      ; 被乘数高位4字符x2和乘数低位4字符y1相乘结果低位存入xy+2,高位存入xy+4

      mov ax,x1
      mov dx,y2
      mul dx
      add [xy+2],ax
      adc [xy+4],dx
      adc [xy+6],0       ; 被乘数低位4个字符x1和乘数高位4个字符y2相乘结果低位存入xy+2,高位存入xy+4

      mov ax,x2
      mov dx,y2
      mul dx
      add [xy+4],ax
      adc [xy+6],dx      ; 被乘数高位4个字符x2和乘数高位4个字符y2相乘结果低位存入xy+4,高位存入xy+6

      mov ah,4ch
      int 21h

ccode ends
end start
目录
相关文章
|
7月前
|
C语言
【汇编语言实战】输入一个无符号整数求其逆序
【汇编语言实战】输入一个无符号整数求其逆序
53 2
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
4月前
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
140 3
|
4月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
116 0
8086 汇编笔记(五):包含多个段的程序
8086 汇编笔记(五):包含多个段的程序
|
7月前
|
编译器 开发者 C++
8086 汇编笔记(三):第一个程序
8086 汇编笔记(三):第一个程序
|
6月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
7月前
|
存储 编译器
C51汇编程序
C51汇编程序
71 5
|
7月前
|
程序员
汇编语言中的带符号比较跳转指令
汇编语言中的带符号比较跳转指令
188 0
|
程序员
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
161 0