gpt4 book ai didi

assembly - 为什么我不能将 64 位值 MOV 到 64 位寄存器?

转载 作者:行者123 更新时间:2023-12-02 18:47:08 26 4
gpt4 key购买 nike

当它编译汇编代码(如之前认为的 x64)并尝试将以下数据加载到堆栈时,我有一个问题:

mov rax, "AAAAAAAAA"; flax == 9
push rax

获取消息:

warning: character constant too long [-w + other]

我知道这只是一个警告,但我认为它在 64 位寄存器上运行,这也由它们的名称指示。

系统是 64 位 Debian(我认为)。该程序还编译为 64 位二进制文​​件:

nasm - f elf64

任何人都可以向我解释一下,或者至少给我一些关键字,如何深入研究这个主题:)

最佳答案

如果你仔细观察:

mov rax, “AAAAAAAAA”; flax == 9

该字符串实际上包含 9 个'A'。每个字符是 1 个字节,即 8 位。这意味着,在 64 位寄存器中只能有 8 个,因为 8 个字符 * 8 位/字符 = 64 位。

要编写十六进制常量,请像在 C 中一样使用 mov rax, 0xAAAAAAAAA。NASM 中的单引号或双引号为您提供(多个)ASCII 字符作为小端整数值,并采用源中的 ASCII 字符订单。

关于assembly - 为什么我不能将 64 位值 MOV 到 64 位寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67272805/

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