实在没有指导,很多东西理解不了

编写一个程序,统计五名学生四门课的成绩,分别为英语,数学,政治,专业课。要求:利用结构体建立学生信息档案,包括姓名,性别,年级,班级,学号信息以及各科成绩,四门课的学分分别为2,2.5,2,3。计算每名学生学分绩并进行排序,用函数完成

.global main


.section .rodata

.LC0:
    .string "%s"

.LC1:
    .string "%c"

.LC2:
    .string "%d"

.LC3:
    .string "%f"

/*
  stu{
   char sname[20];
   char sex;
   int age;
   int class;
   int no;
   int score[4];
 }
 24+4+4+4+16=24+12+16=24+28=52
*/

.text
main:
    pushq %rbp
    movq %rsp,%rbp
    subq $0x1000,%rsp

    movl $0,-4(%rbp) /* i */
    movl $0,-8(%rbp) /* j */
    movl $0,-272(%rbp) /* arr */

    nop
    jmp .Lmain_400
.Lmain_500:

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 0(%rdi),%rsi /* arr[i].sname */
    leaq .LC0(%rip),%rdi 
    movl $0,%eax
    call scanf 

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 20(%rdi),%rsi  /* arr[i].sex */
    leaq .LC1(%rip),%rdi
    movl $0,%eax 
    call scanf 

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 24(%rdi),%rsi  /* arr[i].age */
    leaq .LC2(%rip),%rdi
    movl $0,%eax 
    call scanf 

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 28(%rdi),%rsi  /* arr[i].class */
    leaq .LC2(%rip),%rdi
    movl $0,%eax 
    call scanf 

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 32(%rdi),%rsi  /* arr[i].no */
    leaq .LC2(%rip),%rdi
    movl $0,%eax 
    call scanf 

    movl $0,-8(%rbp) /* j */
    jmp .Lmain_480
.Lmain_499:

    movl -4(%rbp),%eax /* i */
    imull $52,%eax
    movslq %eax,%rax
    leaq -272(%rbp),%rdi /* arr */
    leaq 0(%rdi,%rax,1),%rdi
    leaq 36(%rdi),%rdi  /* arr[i].score */
    movl -8(%rbp),%eax /* j */
    sall $2,%eax
    movslq %eax,%rax
    leaq 0(%rdi,%rax,1),%rsi /* arr[i].score[j] */
    leaq .LC3(%rip),%rdi
    movl $0,%eax 
    call scanf 
    
    addl $1,-8(%rbp) /* j */

.Lmain_480:
    cmpl $4,-8(%rbp) /* j */
    jl .Lmain_499
    
    addl $1,-4(%rbp) /* i */

.Lmain_400:
    cmpl $5,-4(%rbp) /* i */
    jl .Lmain_500


    movl $0,%eax
    leave
    ret