GAS x86程序集串行端口挂起

时间:2016-03-30 01:26:04

标签: assembly x86

以下是我尝试练习汇编语言技能的代码。我正在汇编中编写unix / linux echo函数的一部分。我的问题是每当我输入一个它只是挂起的字符并且永远不会返回输出。我对汇编编程很新。如果有人有任何指示,将非常感激。

我希望函数接受一个comport地址和转义字符。如果我在屏幕上输入一个随机字母,它应该回复相同的字母。这是代码:

   #function call is echo(conport,escape)
#LSR byte is plus 5
#TX and RX are plus 0
.text
.globl _echo

_echo:
        pushl %ebp
        movl %esp, %ebp

        movl 8(%ebp), %edx #grab the comport int
        movb 12(%ebp), %bl #grab the special escape character
        movl %edx, %ecx #copies the comport int address
        addl $5, %edx  #gets me to lsr
loop:
        inb (%dx), %al #reads in  the lsr byte
        andb $1, %al #isolates the DR bit 
        jz loop
ready:
        movl %ecx, %edx #set back edx
        inb (%dx), %al
        cmpb %al, %bl
        je end
        outb %al, (%dx)
        addl $5, %edx #get to lsr for loop
        jmp loop

end:
        movl %ebp, %esp
        popl %ebp
        ret
        .end

我更新了上面的代码。我现在可以获得一个回报,但它会在无限循环中运行,而不是只返回一次并设置一个新行。

更新2:为了澄清更新,我应该能够输入一封信并收回回信。相反,一旦我点击b我得到bbbbbbbbbbbbbbbbbbbbbbb .....永远运行。我试图找出我的逻辑问题,为什么我有这个无限循环。

UPDATE3:更新了代码。我现在没有输出,但它不像过去那样起飞。它会写出一堆字符然后如果按下输入它将进入行的开头并开始写入它们。我知道它需要输入,因为只要我按下转义字符它就会结束。

0 个答案:

没有答案
相关问题