;用一号功能从键盘输入两个一位的十进制数,相乘的结果保存并显示 .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-31 10:37:12 浏览: 75
两个十进制数相乘并显示乘积
3星 · 编辑精心推荐
以下是修改后的程序,可以将结果输出为八位二进制数:
.model small
.data
x db ?,?
infor db 'input:','$'
result db 8 dup(0) ; 用于保存结果的数组
.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 ; 相乘
mov bl, al
mov cl, ah ; 将结果的高位数保存在cl中
mov ah, 1 ; 输入第3个数
int 21h
sub al, 30h
mov ah, 0
mul bl ; 相乘
mov bh, al ; 将结果的低位数保存在bh中
mov al, cl ; 将结果的高位数移动到al中
mov cl, 8 ; 循环计数器初始化为8
loop1:
mov ah, 0
mov dl, '0'
and al, 10000000b ; 取出最高位
jz skip
mov dl, '1'
skip:
mov result[cl-1], dl ; 保存到结果数组
shl al, 1 ; 左移1位
dec cl ; 计数器减1
jnz loop1 ; 如果计数器不为0,继续循环
mov ah, 2 ; 输出结果
mov dl, '0'
mov bx, 0 ; 结果数组的偏移量
loop2:
mov al, result[bx]
mov dl, al
int 21h
inc bx
if bx == 8
mov bx, 0
endif
loop loop2
mov ah, 4ch
int 21h
end start
阅读全文