【问题标题】:Why PUSH CX is executed before PUSH BX is executed in PUSHA instruction为什么在 PUSHA 指令中执行 PUSH BX 之前执行 PUSH CX
【发布时间】:2013-11-03 23:42:28
【问题描述】:

我一直在研究x86汇编语言,PUSHA指令出现了一个问题。

据我所知,Pusha 与 PUSH AX、CX、DX、BX、原始 SP、BP、SI 和 DI 相同。
我想知道的是为什么在PUSHA指令中执行PUSH BX之前执行PUSH CX。

硬件架构有什么原因吗?

【问题讨论】:

    标签: assembly x86 cpu cpu-registers cpu-architecture


    【解决方案1】:

    通用寄存器不按字母顺序排列,字母是单词的缩写:

    AX => Accumulator register
    BX => Base register
    CX => Counter register
    DX => Data register
    

    大多数人使用AXBXCXDX,因为它更容易记住,但对于架构,顺序实际上是AXCXDX、@987654329 @ 这可以是指令操作码中的通知:

     opcode | instruction
    --------+------------------
    B80000  | MOV     AX,0000
    B90000  | MOV     CX,0000
    BA0000  | MOV     DX,0000
    BB0000  | MOV     BX,0000
    50      | PUSH    AX
    51      | PUSH    CX
    52      | PUSH    DX
    53      | PUSH    BX
    

    【讨论】:

    • 感谢您的友好回复,抱歉回复晚了。但是在阅读了您的回复后,又提出了一个问题。为什么操作码的顺序不是按字母顺序排列的?有什么历史原因吗?
    • @joejo 它是按操作码排序的,所以您会看到架构在任何可以使用的地方都使用此命令......将重映射表添加到 CPU 控制单元或微码只是为了重新排序是没有意义的操作数与寄存器文件地址不匹配(这会浪费时间、晶体管和芯片空间并降低功耗)。
    • 我认为问题仍然是为什么操作码是这样设计的,而不是选择与字母顺序一致的方式。
    猜你喜欢
    • 1970-01-01
    • 2019-05-06
    • 2020-06-24
    • 1970-01-01
    • 2014-05-14
    • 2021-09-13
    • 2018-02-14
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多