这是我的教授给我的代码,可以在我们必须使用的程序中使用,但是我遇到了这个错误,却迷失了解决方法。
代码:
node9: .word 9
.word node10
.asciiz "nueve"
错误:在符号表中找不到符号“ Node10”。
这给我所有节点这个错误 任何有关如何解决此问题的帮助都会大有帮助,谢谢大家。
答案 0 :(得分:0)
node9:
是标签声明;它定义了一个地址为该位置的符号。
但是,当您在一行上的 else 某处使用符号名称时,例如作为.word
的操作数,您就是在对该符号进行引用
如果您引用符号但未在带有标签的任何地方定义它,则当然会出现链接器错误。
可能您想要另一个声明
.p2align 2 # make sure the word members are aligned by 2^2 = 4
node10: .word 10
.word node11
.asciiz "ten"
很显然,在某些时候,您需要具有一个不引用另一个新标签的结构。例如它可以指向自身,也可以指向第一个节点(循环链表),或者可以具有NULL指针。
.p2align 2
node11: .word 11
.word 0 # NULL pointer
.asciiz "eleven"
顺便说一句,这看起来像一个链表,其中包含C中这样的节点。
struct node {
int32_t a;
struct node *next;
char buf[]; // flexible array member: arbitrary length buffer, not a pointer
};
我上面的asm块就是基于这种假设。
因此,您的asm块可能是在全局范围内针对此类内容的编译器输出(这当然会产生相同的链接器错误):
struct node node9 = {9, node10, "nine" };
.word
和.asciiz
指令将初始化的静态数据发送到当前节中。