7.4汇编测试答案及解析

简介:汇编补测我又来了,然后系统崩溃+时间太紧张,我还是错得一塌糊涂,最讨厌自己这样马后炮,以后要是能冷静下来想问题就好了。祝xdm都能学好汇编

1:执行以下指令,最终%eax的结果为______(以十六进制格式小写表示例0xffffffff)。
movl $0x895d3a48,%edx
movl $0x21b3dcaa,%eax
cmpl %eax,%edx
jge .L2
subl %edx,%eax
jmp .L3
.L2:
subl %eax,%edx
movl %edx,%eax
.L3:
解析:edx-eax为负数。跳过jge .L2,执行subl edx,eax,得到FFFF FFFF 9856 A262‬
正确答案:0x9856a262

2:给定C函数如下:
int proc(void)
{
int x, y;
scanf(“%x %x”, &y, &x);
return x-y;
}

GCC 产生以下代码:
1 proc:
2 pushl %ebp
3 movl %esp, %ebp
4 subl $48, %esp
5 leal -4(%ebp), %eax
6 movl %eax, 8(%esp)
7 leal -8(%ebp), %eax
8 movl %eax, 4(%esp)
9 movl $.LCO, (%esp) //Pointer to string “x% x%”
10 call scanf
//Diagram stack frame at this point
11 movl -4(%ebp), %eax
12 subl -8(%ebp), %eax
13 leave
14 ret

假设过程proc开始执行时寄存器 %esp的值为0x1d3ef87c, 寄存器 %ebp的值为0xd6edb780。如果proc调用scanf(第10行),而scanf从标准输入中读入值 0x44 和 0x15,假设字符串 “%x %x”存放在存储器位置 0x70009afd。请问,
A. 第3行 %ebp 的值被设置成了多少?
B. 第4行 %esp 的值被设置成了多少?
C. 局部变量 x 和 y 的存放地址是什么?
D. 画出就在scanf返回后proc的栈帧图。
E. 指出proc未使用的栈帧区域。
解析:
栈帧:

0x1d3ef878 ebp 0xd6edb780
0x1d3ef874 x 0x15
0x1d3ef870 y 0x44
0x1d3ef86c
0x1d3ef854
0x1d3ef850 &x 0x1d3ef874
0x1d3ef84c &y 0x1d3ef870
0x1d3ef848 0x70009afd 字符%x,%x的存储器位置

正确答案:
A.0x1d3ef878
B.0x1d3ef848
C.0x1d3ef874,0x1d3ef870
D. 如上图
E.0x1d3ef86c~0x1d3ef854

3:一个c代码文件e.c,需要经过预处理(输出e.i)、编译(输出e.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值