# A demo of accessing fields of structs in MIPS. # Offsets for fields in `struct student` STUDENT_OFFSET_ZID = 0 STUDENT_OFFSET_FIRST = 4 STUDENT_OFFSET_LAST = 20 + STUDENT_OFFSET_FIRST STUDENT_OFFSET_PROGRAM = 20 + STUDENT_OFFSET_LAST STUDENT_OFFSET_ALIAS = 4 + STUDENT_OFFSET_PROGRAM # sizeof the struct - note that there are 2 padding # bytes at the end of the struct. SIZEOF_STRUCT_STUDENT = 10 + STUDENT_OFFSET_ALIAS + 2 .text main: # Locals: # - $t0: struct student *selection la $t0, xavier li $v0, 4 # syscall 4: print_string la $a0, zid_msg # syscall # printf("zID: z"); li $v0, 1 # syscall 1: print_int lw $a0, STUDENT_OFFSET_ZID($t0) # syscall # printf("%d", selection->zid); li $v0, 11 # syscall 11: print_char li $a0, '\n' # syscall # putchar('\n'); li $v0, 4 # syscall 4: print_string la $a0, first_name_msg # syscall # printf("First name: "); li $v0, 4 # syscall 4: print_string la $a0, STUDENT_OFFSET_FIRST($t0) # syscall # printf("%s", selection->first); li $v0, 11 # syscall 11: print_char li $a0, '\n' # syscall # putchar('\n'); li $v0, 4 # syscall 4: print_string la $a0, last_name_msg # syscall # printf("Last name: "); li $v0, 4 # syscall 4: print_string la $a0, STUDENT_OFFSET_LAST($t0) # syscall # printf("%s", selection->last); li $v0, 11 # syscall 11: print_char li $a0, '\n' # syscall # putchar('\n'); li $v0, 4 # syscall 4: print_string la $a0, program_msg # syscall # printf("Program: "); li $v0, 1 # syscall 1: print_int lw $a0, STUDENT_OFFSET_PROGRAM($t0)# syscall # printf("%d", selection->program); li $v0, 11 # syscall 11: print_char li $a0, '\n' # syscall # putchar('\n'); li $v0, 4 # syscall 4: print_string la $a0, alias_msg # syscall # printf("Alias: "); li $v0, 4 # syscall 4: print_string la $a0, STUDENT_OFFSET_ALIAS($t0) # syscall # printf("%s", selection->alias); li $v0, 11 # syscall 11: print_char li $a0, '\n' # syscall # putchar('\n'); li $v0, 0 # jr $ra # return 0; .data abiram: # struct student abiram { .word 5308310 # int zid; .asciiz "Abiram" # char first[20]; .space 20 - 7 .asciiz "Nadarajah" # char last[20]; .space 20 - 10 .word 3778 # int program; .asciiz "abiramn" # char alias[10]; .space 10 - 8 .align 2 # } xavier: # struct student xavier { .word 5417087 # int zid; .asciiz "Xavier" # char first[20]; .space 20 - 7 .asciiz "Cooney" # char last[20]; .space 20 - 7 .word 3778 # int program; .asciiz "xavc" # char alias[10]; .space 10 - 5 # } zid_msg: .asciiz "zID: z" first_name_msg: .asciiz "First name: " last_name_msg: .asciiz "Last name: " program_msg: .asciiz "Program: " alias_msg: .asciiz "Alias: "