【发布时间】:2012-02-15 04:43:39
【问题描述】:
我已经写了下面的代码,你能解释一下这里的程序集告诉我什么吗?
typedef struct
{
int abcd[5];
} hh;
void main()
{
printf("%d", ((hh*)0)+1);
}
组装:
.file "aa.c"
.section ".rodata"
.align 8
.LLC0:
.asciz "%d\n"
.section ".text"
.align 4
.global main
.type main, #function
.proc 020
main:
save %sp, -112, %sp
sethi %hi(.LLC0), %g1
or %g1, %lo(.LLC0), %o0
mov 20, %o1
call printf, 0
nop
return %i7+8
nop
.size main, .-main
.ident "GCC: (GNU) 4.2.1"
【问题讨论】:
-
SPARC。
save指令和名为%gN、%oN和%iN的寄存器是一个死的赠品。 -
由于您使用的是
gcc,您可能想尝试使用标志-g -Wa,-aldh进行编译,这将打印一个将高级源代码与生成的程序集交错的列表。 -
和/或
-fverbose-asm用操作数的高级 var 名称注释每一行。
标签: c assembly compiler-construction sparc