【问题标题】:Variable in NASMNASM 中的变量
【发布时间】: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)。这实际上是我的主要障碍。
  • 你可能想看看Working with structures in NASM。

标签: c nasm x86-64


【解决方案1】:

您可能希望在数据部分定义全局变量,以便初始化这些值。可以使用dq 将指针简单地定义为四字:

section .data

global head
head dq 0

global tail
tail dq 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2016-01-25
    • 2016-02-03
    • 2021-03-31
    相关资源
    最近更新 更多