c - 两遍汇编程序修复

标签 c assembly

我正在开发一个 2 遍汇编程序,并且一直在网上查看示例代码以熟悉自己。我找到了以下代码,但它似乎有问题。你能告诉我有什么问题吗?似乎并没有停止。这是代码

http://www.ccodechamp.com/c-program-of-two-pass-assembler-c-codechamp/

还有一个关于汇编器的一般问题......据我了解,pass是创建默认信息。您能分解一下我需要采取的步骤吗?我想读取文件并检查标签并创建符号表。我知道如何读取文件,但不知道如何检查每个刺痛。

最佳答案

程序无法检测到 END 语句。

首先,input.txt必须有一个END语句,它必须是该行中唯一的3个字符(所以没有前导/尾随空格,并丢弃您在示例输入文件中看到的 // 注释),并且它后面必须跟一个换行符(如果 END 是最后一个)输入中的行,在许多文本编辑器中,这意味着它后面必须有一个空行)。

其次,C 源代码中似乎存在错误;它不承认 fgets 捕获的字符串包含尾随换行符这一事实。在 PASS1PASS2 中都可以找到以下代码行:

while(strcmp(line,"END")!=0)

在这两种情况下,END 后面都应跟有 \n:

while(strcmp(line,"END\n")!=0)

关于c - 两遍汇编程序修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21187938/

相关文章:

c++ - 可以像在 C 中一样在 C++ 中打印 char 的 ASCII 代码吗?

c - 我询问有关 pcap 库的信息(没有看到任何有关数据的信息。)

c - MISRA 2004 规则 8.3 : Clarification

assembly - 尝试启用保护模式时的引导循环

c - 在 C 中命名类型时使用什么样式

c - 尝试对文件求和并通过管道/叉/进程传输时出错?

performance - 为什么我们要在汇编中使用 CPU 寄存器,而不是直接使用内存呢?

c - 需要帮助了解编译器/HLL->程序集

assembly - 代码段和数据段背后的基本原理

c++ - 为什么我的程序的输出不断变化? EAX寄存器不断改变值(value)?