;用一号功能从键盘输入两个一位的十进制数,相乘的结果保存并显示 .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 07:37:11 浏览: 101
.model small
.data
x db ?,?
infor db 'input:','$'
result db 8 dup(0) ; 用于保存结果的数组
stack db 8 dup(0) ; 用于保存中间结果的栈
top db 0 ; 栈顶指针
index db 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
mov cl, al
mov al, bl
mul cl ; 相乘
mov bl, al
mov al, ah
mov ah, 0
push ax ; 将乘积的高位数压入栈中
mov ah, 1 ; 输入第3个数
int 21h
sub al, 30h
mov ah, 0
mov cl, al
pop ax ; 弹出乘积的高位数
mul cl ; 相乘
add bl, al ; 低位相加
adc bh, ah ; 高位相加
push bx ; 将相加结果压入栈中
inc top ; 栈顶指针加1
mov ah, 1 ; 输入第4个数
int 21h
sub al, 30h
mov ah, 0
mov cl, al
mov index, 8 ; 结果数组的索引初始化为8
loop1:
mov ah, 0
pop ax ; 弹出栈顶元素
mul cl ; 相乘
add al, result[index] ; 加上结果数组当前位置的值
mov result[index], al ; 保存到结果数组
inc index ; 索引减1
dec top ; 栈顶指针减1
jnz loop1 ; 如果栈不为空,继续循环
mov ah, 2 ; 输出结果
mov dl, '0'
mov bh, 00h
loop2:
mov al, result[bx]
mov bl, al
and bl, 00000001b ; 取出最低位
shl al, 1 ; 左移1位
mov result[bx], al
inc bx
if bx = 8
mov bx, 0
endif
mov dl, '0'
add dl, bl
int 21h
dec index
jnz loop2
mov ah, 4ch
int 21h
end start
阅读全文