【发布时间】:2015-04-09 22:49:51
【问题描述】:
我正在尝试转换这些行:
struct node * head;
struct node * tail;
进入 nasm (x86-64)。代码部分在 C 中,部分在汇编中。
我应该写section .bss这样的东西吗:
head resb 8
tail resb 8
在section .text 中也使其成为全球性的:
global head:data 8
global tail:data 8
?它不想工作:/我知道指针实际上是一个地址,所以类似于unsigned long。
=====
这是结构:
struct node
{
unsigned long length;
char * buf;
struct node * previous;
struct node * next;
};
【问题讨论】:
-
对您在汇编文件中定义的变量使用
global。将extern用于您正在使用的在另一个模块或库中定义的外部变量。您不需要resb声明,因为它定义 变量,而程序集文件不是定义它们,而是使用它们。只需使用extern head, tail。 -
我的最终目标是将 C 中的整个代码转换为汇编。因此最终它将在程序集文件中定义:) 抱歉没有说明这一点。
-
你的声明在你的问题中说
extern,你问如何转换这些。即使整个代码集都是用汇编编写的,如果您试图在一个汇编模块中引用这些变量,而这些变量在另一个汇编模块中定义,您需要extern。然后在它们被定义的文件中,你可以使用global和resb声明在定义模块中很好。 -
@lurker 请问如何正确定义这样一个指向结构的指针呢?如果在 C 中我有 extern 将在我的程序集文件中定义? (那些全球/ resb)。这实际上是我的主要障碍。