我正在尝试编写汇编程序函数来读取和回显以下C可调用函数的字符
void echo(int comport, unsigned char esc_char)
基本上它会提示您输入一个ESC字符,然后在用户键入一个字符后,它允许您继续键入并在键入该字符时终止该程序。我的实现允许用户分配ESC字符,但在输入后面的任何内容的第一个字母后停止,我相信这可能是某种无限循环。我该如何解决这个问题?
理想情况下,程序会像这样运行
Type escape character and enter d abc(d) Escape character typed - exiting.
但到目前为止发生的事情是
Type escape character and enter p a (Program Freezes)
.text
.globl _echo
_echo:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movb 12(%ebp), %bl
movl 8(%ebp), %edx
xorl %ecx, %ecx
movb $0xfc, %dl
inb (%dx), %al
orb $0x03, %al
outb %al, (%dx)
movb $0xfe, %dl
loop1:
inb (%dx), %al
andb $0xb0, %al
xorb $0xb0, %al
jnz loop1
loop2:
movl $0xfd, %dl
inb (%dx), %al
andb $0x01, %al
jz loop2
movl $0xf8, %dl
inb (%dx), %al
movb %al, %al
cmpb %cl, %bl
je return
movb $0xfd, %dl
type:
inb (%dx), %al
andb $0x20, %al
jz loop2
movzbl %dl, %eax
movl $0xf8, %edx
outb %al, (%dx)
jmp loop2
return:
mov %ebp, %esp
popl %ebp
ret
.end
答案 0 :(得分:1)
从端口读取字符后,您有
movb %al, %al
应该是
movb %al, %cl
然后,在检查THR_EMPTY后,你有
movzbl %dl, %eax
应该是
movb %cl, %al