--- tags: - sorbonne - informatique - architecture-des-ordinateurs - td semestre: 3 --- ```asm beq $8, $9, label # va à label si $8 == $9 bne $8, $9, label # va à label si $8 != $9 blez $8, label # va à label si $8 <= 0 bltz $8, label # va à label si $8 < 0 bgez $8, label # va à label si $8 >= 0 bgtz $8, label # va à label si $8 > 0 j label # va à label jr r1 # va à l'adresse mémoire dans r1 ``` ```asm .data a: .word -5 b: .word 3 .text # on commence par le nom de la fonction main: lui $8, 0x1001 lw $9, 0($8) # if bne $9, $0, else # then lw $9, 0($8) # on recharge à chaque fois qu'on l'utilise lw $10, 4($8) addu $9, $9, $10 sw $9, 0($8) j endif else: lw $9, 0($8) lw $10, 4($8) subu $9, $9, $10 sw $9, 0($8) endif: ori $2, $0, 10 syscall ``` ```asm .data p: .word 10 # 0 -> $9 q: .word 20 # 4 -> $10 i: .word 0 # 8 -> $11 s: .word 0 # 12 -> $12 .text main: lui $8, 0x1001 # i = p lw $9, 0($8) or $11, $0, $9 sw $11, 8($8) for: # i <= q lw $10, 4($8) lw $11, 8($9) slt $13, $10, $11 bne $13, $0, end_for # s += i lw $12, 12($8) lw $11, 8($8) addu $12, $12, $11 sw $12, 12($8) # i++ lw $11, 8($8) addiu $11, $11, 1 sw $11, 8($8) j for end_for: # printf("%d", s) ori $2, $0, 1 lw $12, 12($8) or $4, $0, $12 syscall # exit() ori $2, $0, 10 syscall ``` ```asm .data max: .word 0 tab: .word -2, 1, 5, -7, 42, -9, 0 .text main: lui $8, 0x1001 ori $12, $0, $8 addui $8, $8, 4 # max = tab[0] lw $9, 4($8) or $10, $0, $9 ori $11, $0, $8 sw $10, 0($12) while: # tab[i] != 0 lw $9, 0($8) beq $9, 0, end_while # if tab[i] > max lw $10, 0($12) lw $9, 0($8) slt $10, $10, $9 beq $10, $0, skip # max = tab[i] lw $9, 0($8) lw $10, 0($12) or $10, $0, $9 sw $10, 0($12) skip: # i++ addiu $8, $8, 4 j while end_while: ori $2, $0, 1 lw $4, 0($12) syscall ori $2, $0, 10 syscall ```