📄 tt.alu.bare.s
字号:
.datasllv_: .asciiz "Testing SLLV\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sllv_ lui $a0, 0x1000 ori $a0 $a0 0x1b5 syscall addi $2 $0 1 addi $4 $0 0 sllv $3 $2 $4 ori $5 $0 1 bne $3 $5 fail addi $4 $0 1 sllv $3 $2 $4 ori $5 $0 2 bne $3 $5 fail addi $4 $0 16 sllv $3 $2 $4 lui $5 0x1 ori $5 $5 0x0000 bne $3 $5 fail addi $4 $0 32 sllv $3 $2 $4 ori $5 $0 1 bne $3 $5 fail addu $0 $0 $0 # Nop .dataslt_: .asciiz "Testing SLT\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 slt_ lui $a0, 0x1000 ori $a0 $a0 0x1c3 syscall ori $5 $0 1 slt $3 $0 $0 bne $3 $0 fail addi $2 $0 1 slt $3 $2 $0 bne $3 $0 fail slt $3 $0 $2 bne $3 $5 fail addi $2 $0 -1 slt $3 $2 $0 bne $3 $5 fail slt $3 $0 $2 bne $3 $0 fail addi $2 $0 -1 addi $4 $0 1 slt $3 $2 $4 bne $3 $5 fail addu $0 $0 $0 # Nop .dataslti_: .asciiz "Testing SLTI\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 slti_ lui $a0, 0x1000 ori $a0 $a0 0x1d0 syscall ori $5 $0 1 slti $3 $0 0 bne $3 $0 fail addi $2 $0 1 slti $3 $2 0 bne $3 $0 fail slti $3 $0 1 bne $3 $5 fail addi $2 $0 -1 slti $3 $2 0 bne $3 $5 fail slti $3 $0 -1 bne $3 $0 fail addi $2 $0 -1 addi $4 $0 1 slti $3 $2 1 bne $3 $5 fail slti $3 $4 -1 bne $3 $0 fail addu $0 $0 $0 # Nop .datasltiu_: .asciiz "Testing SLTIU\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sltiu_ lui $a0, 0x1000 ori $a0 $a0 0x1de syscall ori $5 $0 1 sltiu $3 $0 0 bne $3 $0 fail addi $2 $0 1 sltiu $3 $2 0 bne $3 $0 fail sltiu $3 $0 1 bne $3 $5 fail addi $2 $0 -1 sltiu $3 $2 0 bne $3 $0 fail sltiu $3 $0 -1 bne $3 $5 fail addi $2 $0 -1 addi $4 $0 1 sltiu $3 $2 1 bne $3 $0 fail sltiu $3 $4 -1 bne $3 $5 fail addu $0 $0 $0 # Nop .datasltu_: .asciiz "Testing SLTU\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sltu_ lui $a0, 0x1000 ori $a0 $a0 0x1ed syscall ori $5 $0 1 sltu $3 $0 $0 bne $3 $0 fail addi $2 $0 1 sltu $3 $2 $0 bne $3 $0 fail sltu $3 $0 $2 bne $3 $5 fail addi $2 $0 -1 sltu $3 $2 $0 bne $3 $0 fail sltu $3 $0 $2 bne $3 $5 fail addi $2 $0 -1 addi $4 $0 1 sltu $3 $2 $4 bne $3 $0 fail addu $0 $0 $0 # Nop .datasra_: .asciiz "Testing SRA\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sra_ lui $a0, 0x1000 ori $a0 $a0 0x1fb syscall addi $2 $0 1 sra $3 $2 0 ori $5 $0 1 bne $3 $5 fail sra $3 $2 1 bne $3 $0 fail addi $2 $0 0x1000 sra $3 $2 4 ori $5 $0 0x100 bne $3 $5 fail lui $5 0x8000 ori $5 $5 0x0000 add $2 $0 $5 sra $3 $2 4 lui $5 0xf800 ori $5 $5 0x0000 bne $3 $5 fail addu $0 $0 $0 # Nop .datasrav_: .asciiz "Testing SRAV\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 srav_ lui $a0, 0x1000 ori $a0 $a0 0x208 syscall addi $2 $0 1 addi $4 $0 0 srav $3 $2 $4 ori $5 $0 1 bne $3 $5 fail addi $4 $0 1 srav $3 $2 $4 bne $3 $0 fail addi $2 $0 0x1000 addi $4 $0 4 srav $3 $2 $4 ori $5 $0 0x100 bne $3 $5 fail lui $5 0x8000 ori $5 $5 0x0000 add $2 $0 $5 addi $4 $0 4 srav $3 $2 $4 lui $5 0xf800 ori $5 $5 0x0000 bne $3 $5 fail addu $0 $0 $0 # Nop .datasrl_: .asciiz "Testing SRL\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 srl_ lui $a0, 0x1000 ori $a0 $a0 0x216 syscall addi $2 $0 1 srl $3 $2 0 ori $5 $0 1 bne $3 $5 fail srl $3 $2 1 bne $3 $0 fail addi $2 $0 0x1000 srl $3 $2 4 ori $5 $0 0x100 bne $3 $5 fail lui $5 0x8000 ori $5 $0 0x0000 add $2 $0 $5 srl $3 $2 4 lui $5 0x0800 ori $5 $0 0x0000 bne $3 $5 fail addu $0 $0 $0 #Nop .datasrlv_: .asciiz "Testing SRLV\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 srlv_ lui $a0, 0x1000 ori $a0 $a0 0x223 syscall addi $2 $0 1 addi $4 $0 0 srlv $3 $2 $4 ori $5 $0 1 bne $3 $5 fail addi $4 $0 1 srlv $3 $2 $4 bne $3 $0 fail addi $2 $0 0x1000 addi $4 $0 4 srlv $3 $2 $4 ori $5 $0 0x100 bne $3 $5 fail lui $5 0x8000 ori $5 $5 0x0000 add $2 $0 $5 addi $4 $0 4 srlv $3 $2 $4 lui $5 0x0800 ori $5 $5 0x0000 bne $3 $5 fail addu $0 $0 $0 # Nop .datasub_: .asciiz "Testing SUB\n"# sub1_: .asciiz "Expect an overflow exceptions:\n " .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sub_ lui $a0, 0x1000 ori $a0 $a0 0x231 syscall addi $2 $0 1 addi $3 $0 -1 sub $4, $0, $0 bne $4 $0 fail sub $4, $0, $2 addi $5 $0 -1 bne $4 $5 fail sub $4, $2, $0 ori $5 $0 1 bne $4, $5 fail sub $4, $2, $3 ori $5 $0 2 bne $4, $5 fail sub $4, $3, $2 addi $5 $0 -2 bne $4, $5 fail addu $0 $0 $0 # Nop# addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sub1_# syscall# addi $2 $0 0x80000000# addi $3 $0 1# sub $4, $3, $2 .datasubu_: .asciiz "Testing SUBU\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 subu_ lui $a0, 0x1000 ori $a0 $a0 0x23e syscall addi $2 $0 1 addi $3 $0 -1 subu $4, $0, $0 bne $4 $0 fail subu $4, $0, $2 addi $5 $0 -1 bne $4 $5 fail subu $4, $2, $0 addi $5 $0 1 bne $4, $5 fail subu $4, $2, $3 addi $5 $0 2 bne $4, $5 fail subu $4, $3, $2 addi $5 $0 -2 bne $4, $5 fail lui $5 0x8000 ori $5 $5 0x0000 add $2 $0 $5 addi $3 $0 1 subu $4, $3, $2 .datasw_: .asciiz "Testing SW\n"#sw2_: .asciiz "Expect two address error exceptions:\n " .align 2swd_: .byte 0, 0, 0, 0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sw_ lui $a0, 0x1000 ori $a0 $a0 0x24c syscall# addi $3 $0, 0x7f7f7f7f lui $3 0x7f7f ori $3 $3 0x7f7f# la $2 swd_ lui $2, 0x1000 ori $2 $2 0x258 sw $3 0($2) lw $4 0($2) lui $5 0x7f7f ori $5 $5 0x7f7f bne $4 $5 fail# addi $v0 $0 4 # syscall 4 (print_str)# la $a0 sw2_# syscall## sw $3 1000000($sp)# sw $3 1000001($sp) .dataswl_: .asciiz "Testing SWL\n" .align 2swld_: .word 0 0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 swl_ lui $a0, 0x1000 ori $a0 $a0 0x25c syscall# la $2 swld_ lui $2, 0x1000 ori $2 $2 0x26c# addi $3 $0 0x01000000 lui $3 0x0100 ori $3 $3 0x0000 swl $3 0($2) lw $4 0($2) ori $5 $0 0x1 bne $4 $5 fail# addi $3 $0 0x01020000 lui $3 0x0102 ori $3 $3 0x0000 swl $3 1($2) lw $4 0($2) ori $5 $0 0x0102 bne $4 $5 fail# addi $3 $0 0x01020300 lui $3 0x0102 ori $3 $3 0x0300 swl $3 2($2) lw $4 0($2) lui $5 0x01 ori $5 $5 0x0203 bne $4 $5 fail# addi $3 $0 0x01020304 lui $3 0x0102 ori $3 $3 0x0304 swl $3 3($2) lw $4 0($2) lui $5 0x0102 ori $5 $5 0x0304 bne $4 $5 fail addu $0 $0 $0 # Nop .dataswr_: .asciiz "Testing SWR\n" .align 2swrd_: .word 0 0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 swr_ lui $a0, 0x1000 ori $a0 $a0 0x274 syscall# la $2 swrd_ lui $2, 0x1000 ori $2 $2 0x284 addi $3 $0 1 swr $3 0($2) lw $4 0($2) ori $5 $0 1 bne $4 $5 fail addi $3 $0 0x0102 swr $3 1($2) lw $4 0($2) lui $5 0x1 ori $5 $5 0x0201 bne $4 $5 fail# addi $3 $0 0x010203 lui $3 0x01 ori $3 $3 0x0203 swr $3 2($2) lw $4 0($2) lui $5 0x203 ori $5 $5 0x0201 bne $4 $5 fail# addi $3 $0 0x01020304 lui $3 0x0102 ori $3 $3 0x0304 swr $3 3($2) lw $4 0($2) lui $5 0x403 ori $5 $5 0x0201 bne $4 $5 fail addu $0 $0 $0 #Nop .dataxor_: .asciiz "Testing XOR\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 xor_ lui $a0, 0x1000 ori $a0 $a0 0x28c syscall addi $2 $0 1 addi $3 $0 -1 xor $4 $0 $0 bne $4 $0 fail xor $4 $3 $3 bne $4 $0 fail xor $4 $2 $3 lui $5 0xffff ori $5 $5 0xfffe bne $4 $5 fail addu $0 $0 $0 #Nop .dataxori_: .asciiz "Testing XORI\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 xori_ lui $a0, 0x1000 ori $a0 $a0 0x299 syscall addi $2 $0 1 ori $3 $0 -1 xori $4 $0 0 bne $4 $0 fail xori $4 $3 -1 bne $4 $0 fail xori $4 $2 -1# lui $5 0xffff ori $5 $0 0xfffe bne $4 $5 fail .datajal_: .asciiz "Testing JAL\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 jal_ lui $a0, 0x1000 ori $a0 $a0 0x2a7 syscall jal l18 addu $0 $0 $0 # Nopl19: j l20 # 0x00400ea0 addu $0 $0 $0 # Nopl18: lui $4 0x0040 # to replace la $4 l19 ori $4 $4 0x0eb0 # bare machine has a delay slot. bne $31 $4 fail addu $0 $0 $0 #Nop jr $31 addu $0 $0 $0 #Nopl20: addu $0 $0 $0 #Nop -- 0x00400ebc .datajalr_: .asciiz "Testing JALR\n"#jalr2_: .asciiz "Expect an non-word boundary exception:\n " .text addi $v0 $0 4 # syscall 4 (print_str) 0x00400ec0# la $a0 jalr_ lui $a0, 0x1000 ori $a0 $a0 0x2b4 syscall # la $2 l21 lui $2 0x0040 # 0x00400ed0 ori $2 $2 0x0ef4 addu $4 $0 $2 jalr $3, $2 addu $0 $0 $0 #Nop -- 00400ee0l23: j l22l21: addu $0 $0 $0 # la $4 l21 -- delay slot. bne $3 $4 fail addu $0 $0 $0 # Nop -- 00400ef0 jr $3 l22: addu $0 $0 $0 # Nop# li $v0 4 # syscall 4 (print_str)# la $a0 jalr2_# syscall# la $2 l24# add $2 $2 2# l24: jalr $3 $2 .databgezal_:.asciiz "Testing BGEZAL\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 bgezal_ lui $a0, 0x1000 # 00400f00 ori $a0 $a0 0x2c2 syscall addi $2 $0 -1 addi $3 $0 1 # 00400f10 bgezal $0 l5 addu $0 $0 $0 # Nop j fail addu $0 $0 $0 # Nop -- 00400f20l5: bgezal $2 fail addu $0 $0 $0 # Nop bgezal $3 l6 addu $0 $0 $0 # Nop -- 00400f30l55: j fail addu $0 $0 $0 # Nop l6: lui $4 0x0040 # la $4 l55 ori $4 $4 0x0f48 # 00400f40 bne $31 $4 fail addu $0 $0 $0 # Nop .databltzal_:.asciiz "Testing BLTZAL\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 bltzal_ lui $a0, 0x1000 # 00400f50 ori $a0 $a0 0x2d2 syscall addi $2 $0 -1 addi $3 $0 1 # 00400f60 bltzal $0 fail addu $0 $0 $0 # Nop bltzal $3 fail addu $0 $0 $0 # Nop -- 00400f70l13: bltzal $2 l15 addu $0 $0 $0 # Nop l14: j fail addu $0 $0 $0 # Nop -- 00400f80l15: lui $4 0x0040 # la $4 l14 ori $4 $4 0x0f90 bne $31 $4 fail addu $0 $0 $0 # Nop -- 00400f90# Testing the exceptions .databreak_: .asciiz "Testing BREAK\nExpect an exception message:\n "# .text# addi $v0 $0 4 # syscall 4 (print_str)# la $a0 break_# lui $a0, 0x1000# ori $a0 $a0 0x2e2# syscall# break 3 .dataccp_: .asciiz "Testing move to/from coprocessor control z\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 ccp_ lui $a0, 0x1000 ori $a0 $a0 0x310 syscall# li $2 0x7f7f addi $2 $0 0x7f7f ctc0 $2 $3 addu $0 $0 $0 #Nop cfc0 $4 $3 addu $0 $0 $0 #Nop bne $2 $4 fail# li $2 0x7f7f# Skip floating point stuff for now.# addi $2 $0 0x7f7f# ctc1 $2 $3# addu $0 $0 $0 #Nop# cfc1 $4 $3# addu $0 $0 $0 #Nop# bne $2 $4 fail# li $2 0x7f7f addi $2 $0 0x7f7f ctc2 $2 $3 addu $0 $0 $0 #Nop cfc2 $4 $3 addu $0 $0 $0 #Nop bne $2 $4 fail# li $2 0x7f7f addi $2 $0 0x7f7f ctc3 $2 $3 addu $0 $0 $0 #Nop cfc3 $4 $3 addu $0 $0 $0 #Nop bne $2 $4 fail addu $0 $0 $0 # Nop .datamcp_: .asciiz "Testing move to/from coprocessor z\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 mcp_ lui $a0, 0x1000 ori $a0 $a0 0x33c syscall# li $2 0x7f7f addi $2 $0 0x7f7f mtc0 $2 $3 addu $0 $0 $0 # Nop mfc0 $4 $3 addu $0 $0 $0 # Nop bne $2 $4 fail# Skip FP for now.# li $2 0x7f7f# addi $2 $0 0x7f7f# mtc1 $2 $3# addu $0 $0 $0 # Nop# mfc1 $4 $f3# addu $0 $0 $0 # Nop# bne $2 $4 fail# li $2 0x7f7f# addi $2 $0 0x7f7f# li $3 0xf7f7# addi $3 $0 0x7f7f# mtc1.d $2 $4# mfc1.d $6 $4# bne $2 $6 fail# bne $3 $7 fail# li $2 0x7f7f addi $2 $0 0x7f7f mtc2 $2 $3 addu $0 $0 $0 # Nop mfc2 $4 $3 addu $0 $0 $0 # Nop bne $2 $4 fail# li $2 0x7f7f addi $2 $0 0x7f7f mtc3 $2 $3 addu $0 $0 $0 # Nop mfc3 $4 $3 addu $0 $0 $0 # Nop bne $2 $4 fail addu $0 $0 $0 # Nop .datahilo_: .asciiz "Testing move to/from HI/LO\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 hilo_ lui $a0, 0x1000 ori $a0 $a0 0x360 syscall mthi $0 mfhi $2 bne $2 $0 fail mtlo $0 mflo $2 bne $2 $0 fail# li $2 1 addi $2 $0 1 mthi $2 mfhi $3 bne $3 $2 fail# li $2 1 addi $2 $0 1 mtlo $2 mflo $3 bne $3 $2 fail# li $2 -1 addi $2 $0 -1 mthi $2 mfhi $3 bne $3 $2 fail# li $2 -1 addi $2 $0 1 mtlo $2 mflo $3 bne $3 $2 fail addu $0 $0 $0 # Nop .datalswc_: .asciiz "Testing load/store word coprocessor z\n" .align 2lswcd_: .byte 0, 0, 0, 0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 lswc_ lui $a0, 0x1000 ori $a0 $a0 0x37c syscall# li $3, 0x7f7f7f7f lui $3 0x7f7f ori $3 $3 0x7f7f# la $2 lswcd_ lui $2, 0x1000 ori $2 $2 0x3a4 mtc0 $3, $0 addu $0 $0 $0 #Nop swc0 $0 0($2) lw $4 0($2) addu $0 $0 $0 #Nop bne $4 $3 fail lwc0 $1 0($2) addu $0 $0 $0 #Nop mfc0 $5, $1 addu $0 $0 $0 #Nop bne $5 $3 fail addu $0 $0 $0 #Nop# li $3, 0x7f7f7f7f# lui $3 0x7f7f# ori $3 $3 0x7f7f# la $2 lswcd_# lui $2, 0x1000# ori $2 $2 0x3a4# mtc1 $3, $0# addu $0 $0 $0 #Nop# swc1 $f0 0($2)# lw $4 0($2)# addu $0 $0 $0 #Nop# bne $4 $3 fail# lwc1 $f1 0($2)# addu $0 $0 $0 #Nop# mfc1 $5, $f1# addu $0 $0 $0 #Nop# bne $5 $3 fail# li $3, 0x7f7f7f7f lui $3 0x7f7f ori $3 $3 0x7f7f# la $2 lswcd_ lui $2, 0x1000 ori $2 $2 0x3a4 mtc2 $3, $0 addu $0 $0 $0 #Nop swc2 $0 0($2) lw $4 0($2) addu $0 $0 $0 #Nop bne $4 $3 fail lwc2 $1 0($2) addu $0 $0 $0 #Nop mfc2 $5, $1 addu $0 $0 $0 #Nop bne $5 $3 fail addu $0 $0 $0 #Nop# li $3, 0x7f7f7f7f lui $3 0x7f7f ori $3 $3 0x7f7f# la $2 lswcd_ lui $2, 0x1000 ori $2 $2 0x3a4 mtc3 $3, $0 addu $0 $0 $0 #Nop swc3 $0 0($2) lw $4 0($2) addu $0 $0 $0 #Nop bne $4 $3 fail addu $0 $0 $0 #Nop lwc3 $1 0($2) addu $0 $0 $0 #Nop mfc3 $5, $1 addu $0 $0 $0 #Nop bne $5 $3 fail addu $0 $0 $0 #Nop# Done !!! .datapt: .asciiz "Passed all tests\n" .text addi $2 $0 4 # syscall 4 (print_str)# la $a0 sm lui $a0, 0x1000 ori $a0 $a0 0x3a8 syscall lui $4 0x1000 lw $31 0($4) addu $0 $0 $0 # Nop jr $31 # Return from main# .data#fm: .asciiz "Failed test\n" .textfail: addi $2 $0 4 # syscall 4 (print_str)# la $a0 fm lui $a0, 0x1000 ori $a0 $a0 0x4 syscall addi $2 $0 10 # syscall 10 (exit) syscall addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop# Define the exception handling code. This must go first!# Duplicate of standard trap handler. .data .globl __m1___m1_: .asciiz " Exception " .globl __m2___m2_: .asciiz " occurred\n" .ktext 0x80000080 mfc0 $26 $13 # Cause mfc0 $27 $14 # EPC addiu $v0, $0, 4 # syscall 4 (print_str)# la $a0 __m1_ lui $a0, 0x1000 ori $a0 $a0 0x03e5 syscall addiu $v0, $0, 1 # syscall 1 (print_int) addu $a0 $0 $26 syscall addiu $v0, $0, 4 # syscall 4 (print_str)# la $a0 __m2_ lui $a0, 0x1000 ori $a0, $a0, 0x03f1 syscall mtc0 $0, $13 # Clear Cause register rfe # Return from exception handler addiu $27 $27 4 # Return to next instruction jr $27
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -