在符号表中找不到.word符号

时间:2019-06-11 01:04:18

标签: assembly linked-list mips linker-errors

这是我的教授给我的代码,可以在我们必须使用的程序中使用,但是我遇到了这个错误,却迷失了解决方法。

代码:

node9:  .word 9
        .word node10
        .asciiz "nueve"

错误:在符号表中找不到符号“ Node10”。

这给我所有节点这个错误 任何有关如何解决此问题的帮助都会大有帮助,谢谢大家。

1 个答案:

答案 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指令将初始化的静态数据发送到当前节中。