Char数组从C转换为SPARC

时间:2012-11-14 06:11:23

标签: c arrays char sparc

考虑下面显示的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。如果有人能解释那将是伟大的。感谢。

1 个答案:

答案 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]的地址。