汇编程序: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
目录
相关文章
|
1天前
|
C语言
【汇编语言实战】输入一个无符号整数求其逆序
【汇编语言实战】输入一个无符号整数求其逆序
8 2
|
7天前
|
程序员
汇编语言中的带符号比较跳转指令
汇编语言中的带符号比较跳转指令
12 0
|
Android开发 C++
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
861 0
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
|
9月前
|
程序员
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
113 0
|
Windows API
16位和32位的80X86汇编语言的区别
需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性。对于IA-32架构平台而言,选用的32位80386汇编语言,也就只说讨论的操作系统平台是32位的,可以执行文件的格式也是32位而不是64位或16位的。
1282 0
|
C++ Windows
VS2015中运行32位汇编程序
【前言】   这学期开汇编语言课。作为培养方案中的一门选修课,与课组中教微机原理、嵌入式的同事商量,决定这门课就以8086为载体,带大家入门即可。
1380 0
|
C++ iOS开发 Windows
IDA反汇编/反编译静态分析iOS模拟器程序(四)反汇编的符号信息与改名
首先看看windows IDA和xcode的反汇编有什么不同。因为不确定直接分析UIKit的代码会不会有法律问题,还是自己写个例子吧。分析UIKit的时候因为没有完整的debugging symbols,所以得到的反汇编信息会比自己写的代码较少。
1184 0
汇编语言基础教程-乘法指令
1:MUL SRC 无符号数的乘法 SRC是一个乘数,不能是立即数 当SRC为8位时:AX
789 0