为什么ld在具有引用的函数中找到另一个函数中的未定义引用

Ykon O'Clast

作为一种业余爱好,几年前我在大学里短暂看过ARM汇编程序后,我试图学习它。

我以这种方式修改了一个伪的Hello World程序(在书中找到):

 .global _start          

_start:         ldr     R1,=msgtxt      
                mov     R2,#11          
                bl      v_asc           
                mov     R0,#0           
                mov     R7,#1           
                svc     0               


                .text
v_asc:          mov    R0,#1           
                mov    R7,#4           
                svc    0               
                bx      LR              
                .end


                .data
msgtxt:         .ascii  "Yeah Baby!\n"

LD引发以下错误:

prog.o:在函数v_asc': (.text+0x1c): undefined reference tomsgtxt中

只需将.data部分放在.text之上,就可以像魅力一样工作。但是然后_start仍然位于.data之上

 .global _start          

_start:         ldr     R1,=msgtxt      
                mov     R2,#11          
                bl      v_asc           
                mov     R0,#0           
                mov     R7,#1           
                svc     0               

                .data
msgtxt:         .ascii  "Yeah Baby!\n"

                .text
v_asc:          mov    R0,#1           
                mov    R7,#4           
                svc    0               
                bx      LR              
                .end

但这使我感到困惑:

为什么LD在_start中假装引用在v_asc中?为什么“ ldr R1,= msgtxt”行不会引发未定义的引用?

预先感谢。

Ykon O'Clast

自Jester发表评论以来,我一直在回答我的问题(谢谢!)。

我犯了一个菜鸟错误,没有理解.end是否适用于整个程序。

至于关于未定义引用的主要问题,这是由于'='的语义所致,该常量将常量放入文字池中,该对象池在对象文件中位于v_asc之后(我在此页面中找到了更多内容:http:/ /benno.id.au/blog/2009/01/02/literal-pools)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么即使在另一个源文件中定义了constexpr函数,编译器仍会抱怨未定义的引用?

C标头中的一个函数的“未定义的引用”,而另一个函数中的“未定义的引用”

在具有来自另一个文件的内部数组的函数中未定义

对作为另一个类成员的函数的未定义引用

为什么我在React中的状态在一个函数中定义而在另一个函数中未定义?

为什么我不能从 python 中的另一个函数调用一个函数。函数未定义错误

为什么要在源文件中定义一个函数,然后在使用其引用之前在另一个文件中对其进行声明?

为什么我不能在 Child 类中创建另一个 Child 对象?(对“vtable”的未定义引用)

无法引用具有从另一个本地函数捕获的本地函数(Swift)

访问另一个插件中的类时出错(错误:未定义的引用)

在另一个函数React返回的匿名函数中,“ this”是未定义的

在另一个函数中调用时未定义函数(Python)

为什么不能在另一个函数中定义一个函数?

我已经收到一个错误:“在main函数中:对Fraction :: Fraction()的未定义引用”

在 JavaScript 中通过另一个对象引用一个对象时未定义

在Kivy中引用另一个类的函数

为什么不能将右值引用原样传递给C ++ 11中的另一个函数?

为什么从javascript到另一个javascript有未定义的错误?

传递给另一个.js文件中的函数时,属性未定义

函数在同一个文件中定义但在另一个文件中未定义

使用extern引用在另一个编译单元中定义的函数

如何正确引用另一个 EJS 文件中定义的 EJS 函数?

为什么在函数内部使用let声明的某些变量在另一个函数中变得可用,而另一些变量导致引用错误?

C ++:修改了一个函数,试图重新编译,对该函数有未定义的引用

无法在另一个函数中运行一个函数:无法读取未定义的属性“ test” /无法读取未定义的属性“ setState”

Pcap函数具有“未定义的引用”

C ++未定义对具有队列参数的函数的引用

引用另一个结构给出“未定义”

从另一个元素传递模板引用给出了ngIf的未定义