第一个装配程序错误

时间:2013-05-18 13:18:14

标签: assembly

我写了一个ASM程序,试图自学ASM。它似乎没有在emu8086中工作,我完全不知道为什么。

org 100h    

mov dx, 05
cld
while:
   int 21h
   cmp dx, 1
   jz outt
   dec dx

   mov ah, 09h
   int 21h

   jmp while
outt:
   mov ah, 4ch
   mov al, 00
   int 21h

   ret

2 个答案:

答案 0 :(得分:3)

如果没有导游的话,那些愚蠢的汇编者世界就不会让那些不知不觉的人冒险......

您的地图集是Great Tome of Ralf - 最重要的是Chapter 21H

你要做的第一件事是将DX设置为5.为什么你想要这样做是未知的,因为你还没有评论你的行动。

然后你用CLD清除方向旗。非常明智 - 确保字符串指令中寄存器的自动调整在逻辑UP方向上进行。

你的下一步行动令人费解。执行INT 21H时,您要求操作系统执行某些操作。如果您参考地图册,您会发现要执行的操作取决于AH中的值。目前,这可能是0,因为您没有在程序中明确设置它。因此,如果您访问Verse 00 of Chapter 21H of the Tome of Ralf,您可能会发现为什么您的程序似乎在没有实际执行任何操作的情况下终止。

如果你确实避开了那条特别的指示,正如其他人所建议的那样,你会发现接下来的步骤是

  • DX与1
  • 进行比较
  • 可能发现不平等,所以不要跳
  • DX的值减1
  • 将09分配给AH

现在我们有了神奇的口头禅要求操作系统再做一次 - 但是什么?仍然有你的地图集?也许Verse 09可能有所帮助。请注意,DX中的值可能与此密切相关。

完成后,重复最后几个步骤,直到DX = 1,此时我们跳转到OUTT

我们再次加载AH可能具有神奇的价值 - 以及AL。想查看地图册以了解它应该做什么?

答案 1 :(得分:0)

或尝试删除第一个int 21h

如果这不起作用,请尝试将44放入dx