首页 > 解决方案 > ARM64 汇编中的可变大小内存空间

问题描述

我目前有一个外部变量.extern length,它在单独的 C 文件中定义。而下面的arm64汇编代码是固定大小的连续内存:

spaceBottom:
    .space  0x1000
spaceTop:

有没有办法在 arm64 程序集中将此内存空间的大小设置为“长度”(而不是 0x1000)?

标签: assemblyarmarm64gnu-assembler

解决方案


正如评论者所指出的,您可以将其放在头文件中并使用它。

标头.h:

#ifndef HEADER_H
#define HEADER_H

#define MY_LENGTH 0x1000

#endif

来源.c:

#include "header.h"

const unsigned int length = MY_LENGTH;

asm.S:

#include "header.h"

.data

spaceBottom:
    .space MY_LENGTH
spaceTop:

请注意,为了使其与 GNU 工具链一起使用,.S后缀必须为大写。

一个不同的选择是将length变量移动到程序集开始,然后你可以从spaceTopspaceBottom符号构造它的值,如下所示:

.data

spaceBottom:
    .space 0x1000
spaceTop:

.section .rodata

length:
    .4byte spaceTop - spaceBottom

然后你只需要在头文件中声明来修复 C 端:

extern const unsigned int length;

推荐阅读