将字符串写入文件会在汇编中为输出提供奇怪的字符

时间:2015-11-27 20:21:04

标签: assembly dos x86-16 16-bit

我正在尝试将我的字符串保存到汇编中的文件中,但它给了我这个奇怪的输出“ver 2.40(各种特殊字符)”

这就是我的所作所为:

mov ah,09
mov dx,200
int 21
int 20

e 200 "Test$"
n test.com
r cx
:0009
w
q

它成功地保存它并且当我不退出程序并使用“g”时也可以正常运行但是当我“q”并尝试运行test.com时它会给我输出我提到的输出。

3 个答案:

答案 0 :(得分:2)

我认为您正在使用DEBUG.EXE。

e 200 "Test$"执行d 200之后。您会看到内存转储从偏移量200开始。这看起来像:

16C7:0200  54 65 73 74 24 00 00 00-00 00 00 00 00 00 00 00   Test$...........
16C7:0210  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0220  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
16C7:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

现在计算偏移量,直到达到24:200,201,202,203,204 - 您希望将内存从偏移100h存储到204h,这是105h字节(204h-100h + 1 )。

此值将存储在CX

r cx
:0105

使用w编写CX个字节。

答案 1 :(得分:1)

int 20不是我想不到的问题。 cx中的9不足以将代码写入100(大概)并将字符串写为200.我认为您还需要w 100。如果这不是DEBUG,请原谅我。

答案 2 :(得分:0)

我的DOS书中提到了int 20h

  

这是在DOS V1上终止DOS程序的标准方法。随着   介绍DOS函数4Ch31h这不再是   除非必须维护,否则建议终止程序的方法   与DOS V1系统的兼容性。

我建议您使用int 21h函数AH = 4Ch并将AL设置为返回码。