d********e 发帖数: 6814 | 1 有个要翻译c code的题目,不知道怎么写。。。
100刀paypal boa现金或者1000个包子
Translate the following C code into assembly, using the execution block and
then compile your code into binary. Explain the 2 phases CLEARLY!
int main()
{
int n;
short s = 3;
n = f(c);
return n;
}
int f(short s)
{
return 2*s;
}
上面那个有点会写,下面要嵌入call不太会,谢谢 | S*A 发帖数: 7142 | 2 .file "m.c"
.text
.align 2
.globl main
main:
link.w %fp,#-8
move.w #3,-2(%fp)
move.w -2(%fp),%d0
ext.l %d0
move.l %d0,-(%sp)
jsr f
addq.l #4,%sp
move.l %d0,-6(%fp)
move.l -6(%fp),%d0
unlk %fp
rts
.align 2
.globl f
f:
link.w %fp,#-4
move.l 8(%fp),%d0
move.w %d0,-2(%fp)
move.w -2(%fp),%d0
ext.l %d0
add.l %d0,%d0
unlk %fp
rts
Binary objdump:
00000000 :
0: 4e56 fff8 linkw %fp,#-8
4: 3d7c 0003 fffe movew #3,%fp@(-2)
a: 302e fffe movew %fp@(-2),%d0
e: 48c0 extl %d0
10: 2f00 movel %d0,%sp@-
12: 4eb9 0000 0000 jsr 0
18: 588f addql #4,%sp
1a: 2d40 fffa movel %d0,%fp@(-6)
1e: 202e fffa movel %fp@(-6),%d0
22: 4e5e unlk %fp
24: 4e75 rts
00000026 :
26: 4e56 fffc linkw %fp,#-4
2a: 202e 0008 movel %fp@(8),%d0
2e: 3d40 fffe movew %d0,%fp@(-2)
32: 302e fffe movew %fp@(-2),%d0
36: 48c0 extl %d0
38: d080 addl %d0,%d0
3a: 4e5e unlk %fp
3c: 4e75 rts | a****l 发帖数: 8211 | 3 你这是自己写的,还是找了个编译器直接拷贝编译出的代码?
【在 S*A 的大作中提到】 : .file "m.c" : .text : .align 2 : .globl main : main: : link.w %fp,#-8 : move.w #3,-2(%fp) : move.w -2(%fp),%d0 : ext.l %d0 : move.l %d0,-(%sp)
| S*A 发帖数: 7142 | 4 LZ 贴这个问题不知道是什么用意。
现在谁还用 68K 的芯片啊。
向 GCC 致敬。LZ 又没有说不可以参考 gcc。
再说了,就那么两行代码,手写和编译器出来
的其实没有很大区别。
【在 a****l 的大作中提到】 : 你这是自己写的,还是找了个编译器直接拷贝编译出的代码?
| d****i 发帖数: 4809 | 5 GCC确实太牛了,大而全,基本上啥种类的OS和architecture都支持,尽管不见得有专
门针对于某种OS和architecture的特定的编译器来的优化。
【在 S*A 的大作中提到】 : LZ 贴这个问题不知道是什么用意。 : 现在谁还用 68K 的芯片啊。 : 向 GCC 致敬。LZ 又没有说不可以参考 gcc。 : 再说了,就那么两行代码,手写和编译器出来 : 的其实没有很大区别。
|
|