push ax
mov dl,ah
add dl,30h
mov ah,02h
int 21h
pop ax
push ax
mov dl,al
add dl,30h
mov ah,02h
int 21h
===========================
这里错了。两个10以内的数字相加,如果在确保输入正确(没有退格键输入等其他错误输入,一次性完全正确输入的情况下),那么结果肯定小于255,也就是说完全能存放在AL寄存器里,但结果可能大于等于10,
而你
push ax
mov dl,ah
add dl,30h
mov ah,02h
int 21h
pop ax
这段代码中,AH自然为0,所以显示输出为0,没有问题,但是。。。。
push ax
mov dl,al
add dl,30h
mov ah,02h
int 21h
这段代码中,你只能保证AL的十进制数值小于10,才正确,一旦大于等于10,你这样直接调用就不对了。举例来说,当你是6+4时,AL=10D,那么也就是0Ah,此时,DL也等于0AH,再加30H,此时为3AH,3AH不是任何数字的ASCII码。
这下,你修改自己去修改,贫僧已经帮你指出问题所在了。
当然了,你的程序而且还没判断输入错误的情况,只能在确保输入一次性正确的情况下才能使用你的程序,这也需要改进。