我已经在互联网上搜索了一段时间,并提出了一个奇怪的问题。使用 a C compiler
,我将以下内容转换为assembly
to
稍后转换为Y86
:
#include <stdio.h>
int main(void)
{
int j,k,i;
for (i=0; i <5; i++) {
j = i*2;
k = j+1;
}
}
转换后,我得到以下 .s 文件:
.file "Lab5_1.c"
.section ".text"
.align 4
.global main
.type main, #function
.proc 04
main:
save %sp, -112, %sp
st %g0, [%fp-4]
ba,pt %xcc, .LL2
nop
.LL3:
ld [%fp-4], %g1
add %g1, %g1, %g1
st %g1, [%fp-8]
ld [%fp-8], %g1
add %g1, 1, %g1
st %g1, [%fp-12]
ld [%fp-4], %g1
add %g1, 1, %g1
st %g1, [%fp-4]
.LL2:
ld [%fp-4], %g1
cmp %g1, 4
ble %icc, .LL3
nop
mov %g1, %i0
return %i7+8
nop
.size main, .-main
.ident "GCC: (GNU) 4.8.0"
我的问题是关于说明本身。我发现的许多网站都有与这些类似的说明,例如movl
formov
和cmpl
for cmp
。但有些我无法做出其他命令的正面或反面,例如st, ba, pt, or ld to convert to Y86.
这些说明有什么亮点吗?会不会是编译器的问题?作为参考,我正在使用Unix and command gcc -S "filename.c"