gpt4 book ai didi

切割 QWORD 以获得 DWORD 并对其进行计算

转载 作者:行者123 更新时间:2023-11-30 16:40:11 29 4
gpt4 key购买 nike

mov  rax,QWORD PTR [rbp-0x10]

mov eax,DWORD PTR [rax]

add eax,0x1

mov DWORD PTR [rbp-0x14], eax

下一行用 C 语言编写,在 GNU/Linux 环境中使用 GCC 编译。

汇编代码为 int b = *a + 1;。

...

int a = 5;

int* ptr = &a;

int b = *a + 1;

取消引用a地址中的内容,并向其添加 1。之后,存储在新变量下。

我不明白的是汇编代码中的第二行。这是否意味着我剪切 QWORD 以获得 DWORD(QWORD 的一部分)并将其存储到 eax 中?

由于代码只有几行长,我希望将其分成一步一步的部分,以确认我走在正确的轨道上,也弄清楚第二行的作用。谢谢。

最佳答案

What I don`t understand is second line in that assembly code. Does it mean that I cut QWORD to get the DWORD(one part of QWORD) and storing that into eax?

不,第二行取消引用它。不会将 qword 分成两个 dword 半部分。 (Writing EAX zeros the upper 32 bits of RAX)。

它只是碰巧使用了与指针相同的寄存器,因为它不再需要指针了。

在启用优化的情况下进行编译;如果 gcc 不一直存储/重新加载,则更容易看到发生了什么。 (How to remove "noise" from GCC/clang assembly output?)

int foo(int *ptr) {
return *ptr + 1;
}

mov eax, DWORD PTR [rdi]
add eax, 1
ret

( On Godbolt )

关于切割 QWORD 以获得 DWORD 并对其进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46771198/

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