我的x86 8086 ASM程序无法正常打印

时间:2018-11-08 15:05:29

标签: assembly x86-16

我在具有DOSBox虚拟化功能的asm x86中具有以下代码:

.model small
.stack 100h
.data
.code
main proc
  mov ah,1
  int 21h
  mov bl,al
  mov al,1
  int 21h
  add bl,al
  sub bl,'0'
  mov dl,bl
  mov ah,2
  int 21h
  mov ah,4ch
  int 21h
main endp
end main

My expected output was a number and i get this ascii character

该程序假设从终端添加一个号码并在控制台中打印。我希望我的代码是错误的,而不是我的环境。

谢谢您的答案

1 个答案:

答案 0 :(得分:1)

mov al,1     <-- function number goes in AH
int 21h
add bl,al

当您要求输入第二个字符时,您将函数号存储在应该AL的{​​{1}}中时出错。尽管DOS api并未提到AH会因该功能而改变,但您不能相信这是真的。

AH

您使用该单个mov ah, 1 int 21h mov bl, al mov ah, 1 int 21h add bl, al ; This now contains 2 times '0' sub bl, '0' ; Here you correctly subtract 1 of those mov dl, bl mov ah, 2 int 21h 的方式很好并且更短,但是大多数人会这样解决:

sub bl, '0'

但是上述所有操作均有效,并且仅当您输入两个总和实际上小于10的数字时,如果不是,您将为了显示加法的结果,需要输出1个以上的字符。

看看here,了解如何处理多达99个的添加项。