汇编编写子程序实现两个多字节二进制数相乘,并用子程序实现以十六进制的形式输出乘积
时间: 2023-07-14 16:12:49 浏览: 220
以下是汇编代码实现:
```
; 子程序:两个多字节二进制数相乘
; 输入:AX = 第一个数的低位,BX = 第二个数的低位
; 输出:DX:AX = 乘积
MULT:
XOR DX, DX ; 清除 DX 寄存器
MOV CX, 16 ; 循环 16 次
MULT_LOOP:
TEST AX, 1 ; 检查第一个数的最低位是否为 1
JZ MULT_NEXT ; 如果是 0,跳过下面的指令
ADD DX, BX ; 将第二个数加到 DX 中
MULT_NEXT:
SHR AX, 1 ; 将第一个数右移一位
SHL BX, 1 ; 将第二个数左移一位
LOOP MULT_LOOP ; 循环
RET ; 返回
; 主程序
ORG 100h
; 输入两个多字节二进制数
MOV AX, 1001b ; 第一个数为 1001b,即 9
MOV BX, 1010b ; 第二个数为 1010b,即 10
; 调用子程序进行相乘
CALL MULT
; 输出乘积
MOV SI, OFFSET RESULT
MOV AX, DX
CALL HEX_OUTPUT
MOV AX, AX
MOV AX, AX
CALL HEX_OUTPUT
; 停机
INT 20h
; 子程序:以十六进制的形式输出 AX 的值
HEX_OUTPUT:
PUSH AX ; 保存 AX 的值
MOV BX, 10 ; 将 BX 设置为 10,用于除法运算
MOV CX, 4 ; 将 CX 设置为 4,用于循环 4 次
HEX_LOOP:
XOR DX, DX ; 清除 DX 寄存器
DIV BX ; 用 BX 除 AX,得到余数和商
ADD DL, '0' ; 将余数转换为 ASCII 码
CMP DL, '9' ; 如果余数大于 9
JBE HEX_NEXT ; 跳转到 HEX_NEXT
ADD DL, 7 ; 将余数加上 7,转换为大写字母
HEX_NEXT:
MOV [SI], DL ; 将转换后的字符存入结果数组
INC SI ; 将指针移动到下一个位置
LOOP HEX_LOOP ; 循环
POP AX ; 恢复 AX 的值
RET ; 返回
; 数据段
RESULT DB 6 DUP ('0'), '$' ; 存放结果的数组
END
```
运行结果为:`009A`,即乘积为十进制的 90,转换成十六进制后为 9A。
阅读全文