以下是我尝试练习汇编语言技能的代码。我正在汇编中编写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:更新了代码。我现在没有输出,但它不像过去那样起飞。它会写出一堆字符然后如果按下输入它将进入行的开头并开始写入它们。我知道它需要输入,因为只要我按下转义字符它就会结束。