汇编程序指令`.global`的作用是什么

时间:2017-03-03 13:21:25

标签: assembly macros mips

当我在MARS中运行我的代码时,它不需要任何.global指令,我知道MARS不使用该指令。

现在,当我将代码移植到从命令行运行的特定汇编程序(MCB32)时。 所以我必须修改我的代码并添加那些你可以在代码中看到的指令。

那么该指令的作用是什么?这是否意味着像这个函数被定义为全局左右?

我在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:

1 个答案:

答案 0 :(得分:2)

假设您实际上在某处使用了这些标签,那么它就有意义了。我在你提供的代码中看不到它们。

在一个/一些汇编程序中,除非另有说明,否则所有标签都是本地的。在C中,例如所有函数名称都是全局的,除非你把静态放在前面(这可能是标准的东西或编译器使用的约定,不知道,不要打扰我)。因此,对于C,如果您不想在该对象之外发布该函数,则通常会添加静态前端。在asm中,至少有一个/一个,你必须声明标签全局,否则其他对象不能与它连接。即使在一种汇编程序的汇编语言中,有时也会以各种方式声明它的声明,有时候你有指令来声明一些带参数的函数,或者你只是说这个标签是全局的。

与许多其他语言不同,汇编语言通常不是由某些标准定义的,最好是来自芯片或IP供应商的文档,但我们已经无数次地看到它如何定义汇编语言。汇编程序读取和解析汇编语言的程序基本上定义了汇编语言,您可以拥有与同一目标或平台的程序员一样多的汇编程序。只要机器代码是正确的,它由逻辑本身硬连线的标准管理,你就可以发明几乎任何你想让某人编写为该目标制作机器代码的程序的东西。通常但并非总是如此,创建机器语言文档的芯片或IP供应商的精神用于指令,但指令,宏语言等通常非常在汇编程序的领域,有时候尝试为了符合以前的供应商产品,有时会自己出去用自己的东西。

所以你真的必须通过汇编程序去组装并查看文档(如果可用),并且不要假设从汇编程序到汇编程序的一个目标机器/处理器端口的汇编语言,如果你不这样做,则必须重新编写部分那么对你有好处,你很幸运。