考虑如下所示的 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
我想知道 smul %i1, 40, %l1 行在做什么。我不明白为什么它要乘以 40。如果有人能解释一下,那就太好了。谢谢。