zoukankan      html  css  js  c++  java
  • 《深入理解计算机系统》第四章家庭作业

    第四章选题:* 4.43、* 4.44

    *4.43 在3.4.2节中,IA32pushl指令被描述成要减少栈指针,然后将寄存器存储在栈指针的位置。因此,如果我们有一条指令形如对于某个寄存器REG,pushl REG,它等价于下面的代码序列:

    sub $4,%esp
    movl REG,(%esp)
    

    A.借助于练习题4.6中所做的分析,这段代码正确的描述了指令pushl%esp的行为吗?请解释。

    答:没有正确执行pushl %esp。pushl %esp是将esp当前的内容入栈。如果REG是esp,那么代码是先减去了esp,然后将减了4以后的REG移入了esp。

    B.该如何改写这段代码序列,使它能像对REG是其他寄存器时一样,正确地描述REG是%esp的情况?

    答:

    movl REG, %eax
    subl $4, %esp
    movl %eax, (%esp)
    

    *4.44 在3.4.2节中,IA32popl指令被描述为将来自栈顶的结果复制到目的寄存器,然后将栈指针减少。因此,如果有一条指令形如poplREG,它等价于下面的代码序列:

    movl (%esp),REG
    addl $4,%esp
    

    A.借助于练习题4.7中的分析,这段代码序列正确地描述了指令popl%esp的行为吗?请解释。

    答:没有正确执行popl %esp,因为popl %esp是将当前栈顶的值放入esp。如果REG是esp,那么最后得到esp是栈顶值减4之后的值。

    B.该如何改写这段代码序列,使它能像对REG是其他寄存器时一样,正确地描述REG是%esp的情况?

    答:

    movl (%esp), %eax
    addl $4, %esp
    movl %eax, REG
  • 相关阅读:
    第01组 Beta冲刺(1/5)
    2019 SDN上机第6次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    USDT钱包对接交易所 寻找最便捷的USDT充提币API接口文档
    EOS区块链钱包开发教程
    XRP钱包对接教程
    usdt钱包如何跟交易所对接?
    BTC_ETH_USDT_自动充提币API接口,钱包对接交易所教程!
    BTC bitcoin-cli转账及交易的API使用教程
  • 原文地址:https://www.cnblogs.com/20135228guoyao/p/4909129.html
Copyright © 2011-2022 走看看