gpt4 book ai didi

assembly - 用汇编语言定义 "variables"

转载 作者:行者123 更新时间:2023-12-02 19:48:41 33 4
gpt4 key购买 nike

我知道这是一个极其愚蠢的问题,但我有一段时间无法找到答案
如何在 GAS AT&T 汇编语言中正确声明和定义“变量”?
例如,我想要 5 个字节的缓冲区、两个 1 字节变量(最初值为 0)、2 字节变量为 0 和 2 字节变量为 10。
这段代码无法正常工作,至少调试器说(在程序的第一行,在这些声明之后,只有 nop 指令)bc 是大数字而不是零。

.bss
.lcomm r, 5

.data
a: .byte 0
b: .byte 0
c: .word 0
d: .word 10

最佳答案

以下是您在“ watch ”窗口中看到的内容:

a = 0 = 0x00 = 0x0000 = 0x00 0000 = 0x0000 0000

b = 167772160 = 16777216 * 10 = 0x1000000 * 0x0A = 0xA000000

c = 655360 = 65536 * 10 = 0x10000 * 0x0A = 0xA0000

d = 10 = 0x0A = 0x0000 000A

这是什么意思?这意味着您的编译器已完成其工作,但您的调试器将 cb 读取为双字(4 个字节)而不是字节。

当读取b时,它会读取其值0x00c的值0x0000,并且d 的值 0x0A 位于顶部,共同构成 0xA000000

类似的事情也发生在c 上。 a 很幸运,因为接下来的 4 个字节为零,所以 a 实际上是零。

但是,情况并不总是如此。没有任何内容表明 d 之后不能有任何垃圾,更不用说等于零的变量可能出现在 .bss 中(位于完全不同的内存位置)。

关于assembly - 用汇编语言定义 "variables",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559082/

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