You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS:APP练习题2.18疑问:反汇编器补码表示为何与预期不符?

关于CS:APP练习题2.18反汇编显示的疑问解答

这是反汇编器的可读性优化导致的,核心原因有两点:

  1. 立即数的长度适配
    反汇编器会根据指令的类型自动选择最紧凑的表示方式。比如如果这条指令使用的是8位立即数(比如movb或带8位偏移的跳转指令),-0x58(十进制-88)刚好能被8位补码表示(8位补码范围是-128到127),反汇编器就会直接用这个更简洁的负数十六进制形式展示,而非扩展成32位的0xFFFFFFA8。

  2. 补码的等价性
    从补码原理来看,-0x58作为8位补码,扩展到32位时会自动符号扩展为0xFFFFFFA8,二者在CPU执行时的语义完全等价。反汇编器优先展示更直观、更短的形式,方便程序员快速理解数值大小,而非机械输出全长度补码。

举个实际例子:如果是addl $-0x58, %eax这类指令,反汇编器显示的$-0x58对应机器码里的0xA8(8位立即数),CPU执行时会自动将其符号扩展为32位的0xFFFFFFA8再参与运算,结果和直接使用32位立即数完全一致。


内容的提问来源于stack exchange,提问作者Kumaravel Rajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:12:05