Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在汇编程序中直接编写UART_Assembly_X86_Uart - Fatal编程技术网

Assembly 在汇编程序中直接编写UART

Assembly 在汇编程序中直接编写UART,assembly,x86,uart,Assembly,X86,Uart,我正试图编写一个汇编函数来读取和回显以下C可调用函数的字符 void echo(int comport, unsigned char esc_char) 基本上,它会提示您输入ESC字符,然后在用户键入一个字符后,它允许您继续键入,并在键入该字符时终止程序。我的实现允许用户分配ESC字符,但在键入第一个字母之后,就会停止,我相信这可能是某种无限循环。我如何着手解决这个问题 理想情况下,程序会这样运行 但到目前为止发生的是 从端口读取字符后,您有 movb %al, %al

我正试图编写一个汇编函数来读取和回显以下C可调用函数的字符

void echo(int comport, unsigned char esc_char) 
基本上,它会提示您输入ESC字符,然后在用户键入一个字符后,它允许您继续键入,并在键入该字符时终止程序。我的实现允许用户分配ESC字符,但在键入第一个字母之后,就会停止,我相信这可能是某种无限循环。我如何着手解决这个问题

理想情况下,程序会这样运行

但到目前为止发生的是


从端口读取字符后,您有

    movb %al, %al
    movzbl %dl, %eax
应该是

    movb %al, %cl
    movb %cl, %al
然后,在检查thru EMPTY之后,您有

    movb %al, %al
    movzbl %dl, %eax
应该是

    movb %al, %cl
    movb %cl, %al

注释您的代码,特别是如果您希望其他人提供帮助。此外,使用调试器单步执行程序,并亲自查看出错的地方。最后,考虑是否需要为此进行组装。通常你只有
in
/
out
作为程序集,其余的是C。PS:按照通常的调用约定
ebx
是被调用方保存的寄存器。是的,我确定这是第一个
movb$0xfc,%dl
应该以
al
为目标的寄存器?
dx
已由参数中的
movl 8(%ebp),%edx
加载。。。您是否至少进行了一些基本调试以消除明显的问题?然后,您应该对代码进行注释,以明确双重加载
edx
不是错误,而是意图。(我没有进一步阅读代码,因为
ebx
+奇怪的代码已经足够开始了)。感觉像是新编写的代码,根本没有任何调试工作,这不值得评论,因为每隔一行可能会有几个错误。@Ped7g,此函数旨在使用等于0x3f8或0x2f8的第一个参数调用。每个com端口由8个连续的I/O端口组成。在每个端口访问之前加载dl,以指定访问8个端口中的哪一个。最好先执行
mov8(%ebp),%edi
,然后执行
leaxx(%edi),%edx
为每个端口设置dx。有了这个更改,这段代码将与任何com端口地址一起工作。