读取和打印字符串 - 汇编

时间:2014-04-06 13:53:28

标签: string assembly x86 dos

我正在尝试在程序集中创建一个逐字符读取的程序,将其存储在一个数组中然后逐个字符地打印。我知道我可以使用中断来读取和打印字符串,但需要一个自己的代码来了解更多信息。

读取代码,但不知道为什么不打印:

buff dw 0,0,0,0,0,0 
len equ 5 

mov ah, 1 
mov si, 0 

read: 
        
     mov al b.buff[si] 
     int 21h 
     inc si 
     cmp si, len 
     jl read 
     jmp print 
    
mov si, 0 
mov ah, 2 
   
print: 

     mov dl, b.buff [si] 
     int 21h 
     inc si
     cmp dl, 0 
     je end 
     jmp print
    
end:

1 个答案:

答案 0 :(得分:1)

你做错了。不要心疼 - 没有人知道这些东西。

1)您没有告诉我们您正在使用的汇编程序。他们是不同的! (看起来像Eric Isaacson的a86?)

2)您的缓冲区被声明为“word”,但您将其用作“byte”。这可能不会造成太大的伤害。

3)你的缓冲区应该在“数据”部分。你将尝试执行你的缓冲区。这可能会让你非常糟糕。

4)在你的“阅读”循环中,你将缓冲区中的零置于al,然后读取一个字符(进入al)并且不对它做任何事情!这是你的两个“大”问题之一。

5)在“阅读”循环结束时,您跳过将si重置为零并将2加载到ah的两条线...所以您仍然“正在阅读” ,而不是打印(并在缓冲区中的非预期位置)。这是另一个“大问题”。

6)你的“print”循环需要一个以零结尾的字符串。在“读取”循环结束时,您没有明确地将字符串置零。由于您的缓冲区预先填充了零,这可能不会受到影响,但您可能希望这样做。

7)你没有干净地退回到DOS(int 21h/4Ch)...除非“结束”这样做(取决于汇编程序?)。

可能会有更多,但这应该让你更接近。