;用一号功能从键盘输入两个一位的十进制数,相乘的结果保存并显示 .model small .data x db ?,? infor db 'input:','$' .stack 100h .code start: mov ax,@data mov ds,ax mov dx,offset infor mov ah,9 ;显示提示信息"input:" int 21h mov ah,1 ;键盘输入 int 21h sub al,30h ;去掉ASCII码 mov bl,al mov dl,2ah ;显示乘号* mov ah,2 int 21h mov ah,1 ;输入第2个数 int 21h sub al,30h mov ah,0 mul bl ;相乘 aam ;十进制乘法调整,乘积的高位数在AH,低位数在AL中 mov x,al ;保存结果 mov x+1,ah add ax,3030h ;加上ASCII码 mov bx,ax mov ah,2 mov dl,3dh ;显示'=' int 21h mov dl,bh ;显示结果 int 21h mov dl,bl int 21h mov ah,4ch int 21h end start请修改该程序使其输出结果为二进制数‘
时间: 2024-03-24 22:39:56 浏览: 63
下面是修改后的程序,实现了输入两个一位的十进制数,将它们相乘的二进制结果保存并显示:
```
.model small
.data
x db ?,?
infor db 'input:','$'
result db 8 dup ('0') ; 用于保存结果的 8 位二进制数,初始值为 '00000000'
.stack 100h
.code
start:
mov ax, @data
mov ds, ax
; 输入第一个数
mov dx, offset infor
mov ah, 9 ; 显示提示信息"input:"
int 21h
mov ah, 1 ; 键盘输入
int 21h
sub al, 30h ; 去掉 ASCII 码
mov bl, al
; 显示乘号 *
mov dl, 2ah
mov ah, 2
int 21h
; 输入第二个数
mov ah, 1
int 21h
sub al, 30h
mov ah, 0
mul bl ; 相乘
aam ; 十进制乘法调整,乘积的高位数在 AH,低位数在 AL 中
; 将乘积转换为二进制数并保存到 result 中
mov cx, 8 ; 循环 8 次,将乘积转换为 8 位的二进制数
mov si, offset result
convert:
xor ah, ah ; 将 AH 清零
mov al, dl ; 将乘积的低 1 位复制到 AL 中
and al, 1 ; 将 AL 的最低位与 1 做与运算,得到乘积的最低位
or si, al ; 将乘积的最低位存储到 result 中
shr dl, 1 ; 将乘积右移一位
shr si, 1 ; 将 result 右移一位
loop convert ; 继续处理下一位
; 将 result 转换为 ASCII 码并输出
mov si, offset result
mov cx, 8
print:
mov dl, [si]
add dl, 30h
mov ah, 2
int 21h
inc si
loop print
mov ah, 4ch
int 21h
end start
```
该程序的实现思路是:
1. 输入两个一位的十进制数,将它们相乘得到乘积。
2. 将乘积转换为 8 位的二进制数,并将它们存储到 `result` 变量中。这里使用了移位和逻辑运算指令,将乘积的每一位提取出来,并存储到 `result` 的相应位置中。
3. 将 `result` 转换为 ASCII 码并输出,这里使用了循环和 `int 21h` 中断。
阅读全文