编写一个程序,统计五名学生四门课的成绩,分别为英语,数学,政治,专业课。要求:利用结构体建立学生信息档案,包括姓名,性别,年级,班级,学号信息以及各科成绩,四门课的学分分别为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