为啥在执行 pushl 指令时 rA:rB 是 2:8 而不是 2:f?
Posted
技术标签:
【中文标题】为啥在执行 pushl 指令时 rA:rB 是 2:8 而不是 2:f?【英文标题】:Why the rA:rB is 2:8 instead of 2:f in the execution of a pushl instruction?为什么在执行 pushl 指令时 rA:rB 是 2:8 而不是 2:f? 【发布时间】:2019-12-18 13:30:09 【问题描述】:我正在阅读计算机系统的第 4 章:程序员的视角并了解顺序 Y86 实现。所以这里是汇编代码:
并且我们跟踪pushl指令的执行来分析push操作的每一步。这里是流程,左边是通用的,右边是具体的:
除了rA:rB之外的所有步骤我都能理解。看第一张图,指令是a02f,所以在这种情况下,icode:ifun应该是a:0,rA:rB应该是2:f .然而,根据书上的说法,rA:rB 实际上是 2:8 而不是 2:f。但是为什么?而且我真的不知道“8”是从哪里来的。
【问题讨论】:
汇编列表显示pushl
是A02F
,但旁边说pushl
是A028
,一些文本表明F
用于编码无注册,而其他使用 8 那里。我认为任何一种编码都是允许的。你可以看到,对于pushl
,无论是通用的还是特定的,rB
都没有被使用,所以显然没有太大关系。
"旁边说pushl是A028",在哪里?
"我们还可以看到该指令位于地址 0x01a,由 2 个字节组成,值分别为 0xa0 和 0x28。"
但我不知道他从哪里得出这个结论。他只是直接说出了那个结论。
【参考方案1】:
这是一个勘误表,列在errata page for the 2nd edition of the book:
第 4 章:处理器架构
页。 370, 除了跟踪 pushl 指令: 第二个指令字节应该是 0x2f,而不是 0x28。 Fetch阶段rB的值应该是0xf而不是0x8。【讨论】:
以上是关于为啥在执行 pushl 指令时 rA:rB 是 2:8 而不是 2:f?的主要内容,如果未能解决你的问题,请参考以下文章