gpt4 book ai didi

c - 在汇编程序中指定数组

转载 作者:行者123 更新时间:2023-12-02 02:27:29 25 4
gpt4 key购买 nike

我想在我的程序集文件中指定一个 512 x 32 位数组,如下所示:

#define FUNCTION_01     test
#define LABEL_01(name) .L ## test ## _ ## name

.section ".data"
my_array:
.word 0x10101010
.word 0x20101010
.word 0x30101010
.word 0x40101010
...

.section ".text"
.align 4
.global FUNCTION_01
.type FUNCTION_01,#function

FUNCTION_01:

add %g0, 12, %l7
ld [%l7 + my_array], %l7
...
ret
restore

LABEL_01(end):
.size FUNCTION_01,LABEL_01(end)-FUNCTION

所以我在 function_01 中尝试做的是访问数组中的第 4 个元素。但是,当我尝试为 SPARC 架构编译上面的程序集时,出现以下错误:

(.text+0x75c): relocation truncated to fit: R_SPARC_13 against `.data'
collect2: ld returned 1 exit status

不确定从这个错误中得到什么。这是否意味着数组太大或者我在代码中有其他错误?

最佳答案

警告:我从未使用过 sparc 程序集,但鉴于还没有人回答,我做了一个快速教程,看看是否可以提供帮助。

根据 this page , ld 指令中的常量必须是当前值 4KiB 以内的偏移量。您正在尝试添加地址,而不是偏移量,这就是您收到错误的原因。此外,数据部分与文本部分的距离可能超过 4 KiB。您需要做的是将数组的地址放在 %l7 中,并将这 12 个字节用作 ld 的常量。为此,您可以使用 set 指令(这实际上不是指令,汇编器将其更改为 sethior 的组合。 ).

set  my_array,%l7
ld [%l7 + 12],%l7

关于c - 在汇编程序中指定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com