gpt4 book ai didi

assembly - 将常量字节值移动到 %ebx 时出错

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

我正在研究计算机系统,程序员的观点(第 3 版),练习题 3.3 包含以下行:

movb $0xF, (%ebx)

我应该找出这行 x86-64 汇编代码有什么问题,答案是:“不能使用 %ebx 作为地址寄存器”,这对我来说没有意义。我的理解是这一行打算将 0xF 复制到主内存中的某个位置,但是 %ebx 是一个 32 位寄存器,64 位机器上的内存地址是 64 位宽,因此 %ebx 不能保存内存地址,因此它不能被取消引用(取消引用是 %ebx 周围的括号所代表的,对吗?)。然而,翻开书中的几页(第 183 页,如果你有的话)有一个例子详细说明了五个 mov 操作数 - 目标组合,其中之一是:
movb $-17, (%esp)         Immediate--Memory, 1 byte

%esp 是一个 32 位寄存器,就像 %ebx!这个例子显示了一个字节值被移动到一个取消引用的 32 位寄存器!这对我来说没有意义,因为 %esp 如何包含 64 位地址?我完全误解了汇编吗?

最佳答案

你说得对,

movb $-17, (%esp)         Immediate--Memory, 1 byte

不应该被允许。事实上,作者已将此作为错别字发布。
查看他们的 errata list (Ctrl-F 表示“第 183 页”)。

关于assembly - 将常量字节值移动到 %ebx 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633075/

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