计组期末复习(一) C语言与汇编的转化
汇编指令英文全称
首先给出一张表格
这里的e代表equal
b代表below
a代表above
g代表greater
l代表less
前两条指令很明显是将x和y装入
第一条指令的 eax中存放的是x
第二条指令的 edx中存放的是y
下面看第三四条指令:对照上述表我们可以知道它的含义是
如果 x > -100 的话就跳转到.L1执行
所以如果不满足上图条件,也就是说(x <= -100 )才会继续执行第五条指令
第 5,6条指令与上面类似,如果 y <= x 的话就跳转到.L2执行
同样的只有在不满足跳转的条件下,也就是 y > x 的时候才按顺序执行第7条指令
第七条指令简单了许多,就是将x与y相加
**z = x + y **
第八条 .L3 也就是return 运行结束
接下来 第九条开始是.L2,也就是我们之前在5,6条的情况下满足y<=x的条件所跳转的部分
第十条指令的意思是做减法: z = x - y
第11条跳转到.L3 return
继续.L1的内容
13,14行的指令 代表如果x<y的话就跳转至.L4
如果x>=y就继续执行 andl是与操作 z = x & y
接下里就跳转.L3结束
**17,18行的
简单的说就是z = x * y **
上面我简单的把各行的含义分析了一下,接下来就是激动人心的填空环节了,先梳理一下流程
if x > -100:
-> L1{
if x < 16 :
-> L4{
z = x * y
}
else:
z = x & y
return z
}
else:
if y <=x :
->L2{
z = x - y
return z
}
else:
z = x + y
return z
然后根据左边的C语言框架填空,条件要反一反
第一步
if (x <= -100){
}else if(x>=16)
z = x & y
第二步
if (x <= -100){
if(y > x)
z = x + y
else
z = x - y
}else if(x>=16)
z = x & y
第三步
int z = x * y
if (x <= -100){
if(y > x)
z = x + y
else
z = x - y
}else if(x>=16)
z = x & y
return z
附上答案