x86汇编(如何显示计数器?)

时间:2014-11-11 11:30:11

标签: assembly x86 masm dos

此代码的目的是显示标题" hello World"其下的数值表示INC计数器的使用次数。如果您运行此代码,在MS DOS下显示字符串下面的字母K(我需要一个数字)。作为旁注,寄存器D不能使用,我指定的内存位置是899.所以基本上我只是需要帮助弄清楚为什么我每次运行程序时都会收到一个字母(或其他随机字符)而不是数字。我认为我的问题是在第一个INT 21之后,但我不是100%肯定。我会喜欢这方面的一些意见,如果可能的话可能会更正。这是我的代码:

debug
a100
MOV cL, 02
MOV AL, [0899]
MOV BL, [0900]
SUB AL, BL
MOV BL, 0
JGE 115
INC BL
ADD AL, CL
JMP 10D
MOV [0899], AL
MOV DX, 054B
MOV AH, 09
INT 21
ADD BL, 30
MOV CL, BL
MOV AH, 02
INT 21
INT 20

e 054B "Hello World" 0d 0a "$"

g=100

1 个答案:

答案 0 :(得分:1)

INT 21 FN 02需要注册DL中的ASCII字符( BLCL)。 DL设置为MOV DX, 054B到4Bh,即' K'的ASCII码。

我建议Ralf Brown's Interrupt List检查INT 21h的正确用法。 INT 21 FN 02的描述可以在" Int 21 / AH = 02h"。

下找到。

BTW:请注意DEBUG.EXE中的每个数字都是十六进制的! 0899是十进制2201,0900是十进制2304,0899之后是089A(不是0900)。

我不知道[0899]和[0900]的初始值,并怀疑没有。您可以使用与" Hello ..." -string:

相同的方式对其进行初始化
e 899 5
e 900 10