考虑下面显示的C源代码语句。
struct person
{
char name[30];
int id;
int points;
};
char Fmt[] = "Name: %s ID: %d Points: %d\n";
void display_one( struct person List[], int I )
{
printf( Fmt, List[I].name, List[I].id, List[I].points );
}
完成下面的SPARC汇编语言代码段以使序列完成 汇编语言语句的等价于上面的C语句。
.section ".data"
.align 4
Fmt: .asciz "Name: %s ID: %d Points: %d\n"
.global display_one
.section ".text"
.align 4
display_one:
save %sp, -96, %sp
smul %i1, 40, %l1
add %i0, %l1, %l0
set Fmt, %o0
mov %l0, %o1
ld [%l0+32], %o2
ld [%l0+36], %o3
call printf
nop
ret
restore
我想知道smil%i1,40,%l1行是做什么的。我不明白为什么它乘以40。如果有人能解释那将是伟大的。感谢。
答案 0 :(得分:1)
40
的大小为struct person
:
char name[30]; // 30 bytes
// 2 bytes padding to make the following int aligned
int id; // 4 bytes
int points; // 4 bytes
参数I
乘以40
以计算List[I]
的地址。