汇编程序指令 .global 的作用是什么
What is the effect of the assembler directive `.global`
当我在 MARS 中 运行 我的代码时,它不需要任何 .global
指令,而且我知道 MARS 不使用该指令。
现在,当我将我的代码移植到一个特定的汇编器 (MCB32) 时,运行s 来自命令行。
所以我不得不修改我的代码并添加那些你可以在代码中看到的指令。
那么该指令的作用是什么?这是否意味着类似此函数的定义是全局的?
我在MARS汇编器中使用的.macro
# Written 2015 by F Lundevall
# Copyright abandonded - this file is in the public domain.
.macro PUSH (%reg)
addi $sp,$sp,-4
sw %reg,0($sp)
.end_macro
.macro POP (%reg)
lw %reg,0($sp)
addi $sp,$sp,4
.end_macro
.data
.align 2
main:
我在MCB32汇编器中使用的.macro
.global delay
.global time2string
.macro PUSH reg
addi $sp,$sp,-4
sw \reg,0($sp)
.endm
.macro POP reg
lw \reg,0($sp)
addi $sp,$sp,4
.endm
.data
.align 2
.text
main:
好吧,假设您确实在某处使用了这些标签,那么它就有意义了。我在您提供的代码中看不到它们。
在one/some 汇编程序中,所有标签都是局部的,除非另有说明。例如,在 C 中,所有函数名称都是全局的,除非您将静态放在前面(这可能是编译器使用的标准事物或约定,不知道,不要打我)。因此,对于 C,如果您不想在该对象之外发布该函数,您通常会在前面添加一个静态。在 asm 中,至少 one/some 你必须将标签声明为全局标签,否则其他对象无法 link 使用它。即使在一种汇编程序的汇编语言中,有时也会以各种方式声明它的声明方式,有时您有指令将某些东西声明为带参数的函数等,或者您只是说这个标签是全局的。
与许多其他语言不同,汇编语言通常不由某些标准定义,充其量是来自芯片或 IP 供应商的文档,但我们已经无数次看到如何未能定义汇编语言。汇编程序读取和解析汇编语言的程序基本上定义了该汇编语言,对于同一目标或平台,您可以拥有与程序员一样多的汇编器。只要机器代码是正确的,它在很大程度上受标准控制,在逻辑本身中是硬连线的,你就可以发明几乎任何你想要的东西,允许某人编写程序来为该目标制作机器代码。通常但并非总是如此,创建机器语言文档的芯片或 IP 供应商的精神用于指令,但指令、宏语言等通常在汇编程序领域内,有时试图符合以前的供应商产品,有时会带着自己的东西自己出去。
所以你真的必须一个接一个地使用汇编器并查看文档(如果有的话),并且不要假设汇编语言用于一个目标 machine/processor 从汇编器到汇编器的端口,预计必须重写部分,如果你不那么对你有好处,你很幸运。
当我在 MARS 中 运行 我的代码时,它不需要任何 .global
指令,而且我知道 MARS 不使用该指令。
现在,当我将我的代码移植到一个特定的汇编器 (MCB32) 时,运行s 来自命令行。 所以我不得不修改我的代码并添加那些你可以在代码中看到的指令。
那么该指令的作用是什么?这是否意味着类似此函数的定义是全局的?
我在MARS汇编器中使用的.macro
# Written 2015 by F Lundevall
# Copyright abandonded - this file is in the public domain.
.macro PUSH (%reg)
addi $sp,$sp,-4
sw %reg,0($sp)
.end_macro
.macro POP (%reg)
lw %reg,0($sp)
addi $sp,$sp,4
.end_macro
.data
.align 2
main:
我在MCB32汇编器中使用的.macro
.global delay .global time2string.macro PUSH reg addi $sp,$sp,-4 sw \reg,0($sp) .endm .macro POP reg lw \reg,0($sp) addi $sp,$sp,4 .endm
.data .align 2 .text main:
好吧,假设您确实在某处使用了这些标签,那么它就有意义了。我在您提供的代码中看不到它们。
在one/some 汇编程序中,所有标签都是局部的,除非另有说明。例如,在 C 中,所有函数名称都是全局的,除非您将静态放在前面(这可能是编译器使用的标准事物或约定,不知道,不要打我)。因此,对于 C,如果您不想在该对象之外发布该函数,您通常会在前面添加一个静态。在 asm 中,至少 one/some 你必须将标签声明为全局标签,否则其他对象无法 link 使用它。即使在一种汇编程序的汇编语言中,有时也会以各种方式声明它的声明方式,有时您有指令将某些东西声明为带参数的函数等,或者您只是说这个标签是全局的。
与许多其他语言不同,汇编语言通常不由某些标准定义,充其量是来自芯片或 IP 供应商的文档,但我们已经无数次看到如何未能定义汇编语言。汇编程序读取和解析汇编语言的程序基本上定义了该汇编语言,对于同一目标或平台,您可以拥有与程序员一样多的汇编器。只要机器代码是正确的,它在很大程度上受标准控制,在逻辑本身中是硬连线的,你就可以发明几乎任何你想要的东西,允许某人编写程序来为该目标制作机器代码。通常但并非总是如此,创建机器语言文档的芯片或 IP 供应商的精神用于指令,但指令、宏语言等通常在汇编程序领域内,有时试图符合以前的供应商产品,有时会带着自己的东西自己出去。
所以你真的必须一个接一个地使用汇编器并查看文档(如果有的话),并且不要假设汇编语言用于一个目标 machine/processor 从汇编器到汇编器的端口,预计必须重写部分,如果你不那么对你有好处,你很幸运。