首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用“riscv32 32-未知-精灵-gcc”时,如何按字节存储或加载到内存中?

当使用“riscv32 32-未知-精灵-gcc”时,如何按字节存储或加载到内存中?
EN

Stack Overflow用户
提问于 2020-11-26 06:57:36
回答 1查看 622关注 0票数 1

我想操作内存加载或存储字节(8位)或半字(16位)单位。

所以我做了C代码如下,并使用“riscv32 32-未知-精灵-gcc”编译它。

代码语言:javascript
复制
void fun3 (void) {
    char i,j;
    i = (char)*(volatile unsigned int *) 0xf10007f8;
    j = (char)*(volatile unsigned int *) 0xf10007f4;
    *(volatile unsigned int *) 0xf10007f0 = (char) i+j;
    *(volatile unsigned int *) 0xf10007fc = (int ) 0x4;
}

我按如下方式编译了它,函数的de代码如下所示。

代码语言:javascript
复制
riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles -nostdlib -Os   -x c  -Wl,-T,/work/test5.x -o test5.o test5.c
riscv32-unknown-elf-objdump -d -t test5.o > test5_Os.dump


f100006c <fun3>:
f100006c:   f1000737            lui a4,0xf1000
f1000070:   7f872783            lw  a5,2040(a4) # f10007f8 <__global_pointer$+0xffffeef0>
f1000074:   7f472683            lw  a3,2036(a4)
f1000078:   0ff7f793            andi    a5,a5,255
f100007c:   0ff6f693            andi    a3,a3,255
f1000080:   00d787b3            add a5,a5,a3
f1000084:   7ef72823            sw  a5,2032(a4)
f1000088:   00400793            li  a5,4
f100008c:   7ef72e23            sw  a5,2044(a4)
f1000090:   00008067            ret

我想将上面汇编程序代码中的"lw“和"sw”转换为"lb“和"sb”。

如果你知道,请回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-26 07:46:42

如果你重新安置:

代码语言:javascript
复制
i = (char)*(volatile unsigned int *) 0xf10007f8;
j = (char)*(volatile unsigned int *) 0xf10007f4;
*(volatile unsigned int *) 0xf10007f0 = (char) i+j;

有:

代码语言:javascript
复制
i = *(char*) 0xf10007f8;
j = *(char*) 0xf10007f4;
*(char *) 0xf10007f0 = i+j;

编译器将生成加载和存储字节。

事实上,在您的代码中,您告诉他加载一个单词,因为您使用的是一个无符号int指针,并将结果转换为char,因此他将使用lw是正常的。对于商店,您使用的是一个无符号的int指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65017329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档