C 如何在ARMv8部件中键入EOF?

C 如何在ARMv8部件中键入EOF?,c,assembly,eof,armv8,C,Assembly,Eof,Armv8,我使用的是具有Aarch64执行状态的ARMv8指令集。我遇到的问题是,我们应该将C代码翻译成汇编代码,而我却陷入了以下困境: while (c != '\n' && c != EOF) c = getchar(); 我知道while循环的基本设置,以及如何测试c!='\n'但我的问题是如何在汇编中编写EOF。 我可以打字吗 cmp c_r, EOF b.eq skipwhile 还是其他原因?这取决于您在汇编中为getchar()使用的代码。- 如果您只是使用对标

我使用的是具有Aarch64执行状态的ARMv8指令集。我遇到的问题是,我们应该将C代码翻译成汇编代码,而我却陷入了以下困境:

while (c != '\n' && c != EOF)
    c = getchar();
我知道while循环的基本设置,以及如何测试
c!='\n'
但我的问题是如何在汇编中编写
EOF
。 我可以打字吗

cmp c_r, EOF
b.eq skipwhile

还是其他原因?

这取决于您在汇编中为
getchar()使用的代码。
-

  • 如果您只是使用对标准C库的汇编版本的调用
    getchar()
    ,那么您可以使用C库的
    EOF
    -定义进行测试,通常
    -1
  • 如果您正在汇编中实现自己的
    getchar()
    ,那么当
    getchar()
    实现到达文件末尾时,您需要将测试与它的返回值相匹配

这是一个C语言的宏,很可能扩展到-1。尝试查找类似的宏或仅使用-1printf(“%X\n”,EOF);仅供参考:您可以使用
gcc-einfle.c
仅预处理源代码。这将替换所有宏,包括文件等。将有许多空行,但您将看到实际编译器看到的内容,因此像EOF这样的宏将被替换为,例如,
(-1)
或其他内容。这在手工编译时非常有用。(如果您不使用
gcc
,大多数编译器上都有类似的选项)(也有生成程序集的选项,只需输入“…;-”)