emu8086添加两个数字,输出不低于10

时间:2016-06-15 08:40:04

标签: emu8086

这里的代码甚至两个数字输出低于10但我需要知道输出10 谢谢。

.model small 
.stack 100h
.data
msg1 db "The sum of$"
msg2 db "and$"
msg3 db "is:$"
.code
main proc

mov ax,@data
mov ds,ax

mov ah,9
lea dx,msg1
int 21h

mov ah, 2
mov dl,20h
int 21h

mov ah,1
int 21h
mov bl,al 

mov ah,9
lea dx,msg2
int 21h  

mov ah, 2
mov dl,20h
int 21h

mov ah,1
int 21h
mov cl,al

mov ah,9
lea dx,msg3
int 21h

mov ah, 2
mov dl,20h
int 21h

mov ah,2
mov dl,20h
int 21h    

add bl,cl
sub bl,30h

mov ah,2
mov dl,bl
int 21h

main endp
end main

1 个答案:

答案 0 :(得分:1)

由于您仍处理从“0”到“9”的单字符输入,因此最大数字可以是18(9 + 9)。对大于9的值进行简单检查就可以解决问题:

    mov  ah, 2    ;DOS display function
    add  bl, cl   ;Sum of 2 characters
    sub  bl, 30h  ;Remove the extra 30h
    cmp  bl, "9"
    jbe  PrintDigit
    mov  dl, "1"
    int  21h
    sub  bl, 10
PrintDigit:
    mov  dl, bl
    int  21h

为什么在输出字符串后直接输出空格字符?你知道你可以轻松地将这个空格字符放在消息中!

msg1 db "The sum of $"   <--- See the extra space before the $
msg2 db "and $"          <--- See the extra space before the $
msg3 db "is:  $"         <--- See the 2 extra spaces before the $