• 2022-10-30
    leave指令用于撤销函数调用堆栈,等价于以下两条指令:
    movl %ebp,%esp
    popl %ebp
  • 正确

    举一反三

    内容

    • 0

      第22题中caller函数对应的机器级代码如下:1 pushl %ebp2 movl %esp, %ebp3 subl $24, %esp4 movl $100, -12(%ebp)5 movl $200, -8(%ebp)6 movl -8(%ebp), %eax7 movl %eax, 4(%esp)8 movl -12(%ebp), %eax9 movl %eax, (%esp)10 call add11 movl %eax, -4(%esp)12 movl -4(%ebp), %eax13 leave14 ret假定caller的调用过程为P,对于上述指令序列,以下叙述中错误的是()。 A: 第1条指令将过程P的EBP内容压入caller栈帧 B: 第2条指令使EBP内容指向caller栈帧的底部 C: 第3条指令将栈指针ESP向高地址方向移动,以生成当前栈帧 D: 从上述指令序列可看出,caller函数没有使用被调用者保存寄存器

    • 1

      movl 0xc(%ebp),%eax这条指令的作用等价于eax=*(int32_t*)(ebp+12)。

    • 2

      IA-32中指令“popl %ebp”的功能是( )。? R[ebp]←M[R[esp]],R[esp]←R[esp]+4|R[esp]←R[esp]-4,R[ebp]←M[R[esp]]|;R[ebp]←M[R[esp]],R[esp]←R[esp]-4|R[esp]←R[esp]+4,R[ebp]←M[R[esp]]

    • 3

      (接上题)假设set函数在开始时首先使用两条指令“push %ebp”和“mov %esp,%ebp”将其栈帧基址保存于寄存器ebp中,则下列哪条/组指令将函数的字符串参数中的第2个字符的ASCII编码保存到al寄存器中?() A: movb 0xd(%ebp), %al B: movl 0xd(%ebp), %eaxmovb (%eax), %al C: movl 0xc(%ebp), %eaxmovb 0x1(%eax), %al D: lea 0xc(%ebp), %eaxmovb 0x1(%eax), %al

    • 4

      在空栈状态下,以下代码执行完成后,esp指向哪里?()<br/>pushl $8<br/>movl %esp,%ebp<br/>pushl %esp<br/>pushl $8<br/>addl $4 ,%esp<br/>popl %esp A: . 起始位置-2; B: . 起始位置-4; C: . 起始位置+4; D: . 起始位置;