⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tt.le.s

📁 用汇编语言编程源代码
💻 S
📖 第 1 页 / 共 4 页
字号:
# SPIM S20 MIPS simulator.# A torture test for the SPIM simulator.# Version for little-endian systems.# Copyright (C) 1990-2000 James Larus, larus@cs.wisc.edu.# ALL RIGHTS RESERVED.## SPIM is distributed under the following conditions:## You may make copies of SPIM for your own use and modify those copies.## All copies of SPIM must retain my name and copyright notice.## You may not sell SPIM or distributed SPIM in conjunction with a commerical# product or service without the expressed written consent of James Larus.## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR# PURPOSE.## $Header: /u/l/a/larus/Software/SPIM/src/Tests/RCS/tt.le.s,v 1.44 1999/01/12 05:57:03 larus Exp $	.datasaved_ret_pc:	.word 0		# Holds PC to return from mainm3:	.asciiz "The next few lines should contain exception error messages\n"m4:	.asciiz "Done with exceptions\n\n"	.text	.globl mainmain:	sw $31 saved_ret_pc## The first thing to do is to test the exceptions:#	li $v0 4	# syscall 4 (print_str)	la $a0 m3	syscall# Exception 1 (INT) -- Not implemented yet# Exception 4 (ADEL)	li $t0 0x400000	lw $3 1($t0)# Exception 5 (ADES)	sw $3 1($t0)# Exception 6 (IBUS) -- Can't test and continue# Exception 7 (DBUS)	lw $3 10000000($t0)# Exception 8 (SYSCALL) -- Not implemented# Exception 9 (BKPT)	break 0# Exception 10 (RI) -- Not implemented (can't enter bad instructions)# Exception 12 (overflow)	li $t0 0x7fffffff	add $t0 $t0 $t0	li $v0 4	# syscall 4 (print_str)	la $a0 m4	syscall## Try modifying R0#	add $0, $0, 1	bnez $0 fail## Now, test each instruction#	.dataadd_:	.asciiz "Testing ADD\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 add_	syscall	li $2 1	li $3 -1	add $4, $0, $0	bnez $4 fail	add $4, $0, $2	bne $4 1 fail	add $4, $4, $3	bnez $4 fail	.dataaddi_:	.asciiz "Testing ADDI\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 addi_	syscall	addi $4, $0, 0	bnez $4 fail	addi $4, $0, 1	bne $4 1 fail	addi $4, $4, -1	bnez $4 fail	.dataaddiu_:	.asciiz "Testing ADDIU\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 addiu_	syscall	addiu $4, $0, 0	bnez $4 fail	addiu $4, $0, 1	bne $4 1 fail	addiu $4, $4, -1	bnez $4 fail	li $2 0x7fffffff	addiu $2 $2 2	# should not trap	bne $2 0x80000001 fail	.dataaddu_:	.asciiz "Testing ADDU\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 addu_	syscall	li $2 1	li $3 -1	addu $4, $0, $0	bnez $4 fail	addu $4, $0, $2	bne $4 1 fail	addu $4, $4, $3	bnez $4 fail	li $2 0x7fffffff	addu $2 $2 $2		# should not trap	bne $2 -2 fail	.dataand_:	.asciiz "Testing AND\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 and_	syscall	li $2 1	li $3 -1	and $4 $0 $0	bnez $4 fail	and $4 $2 $2	beqz $4 fail	and $4 $2 $3	bne $4 1 fail	.dataandi_:	.asciiz "Testing ANDI\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 andi_	syscall	li $2 1	li $3 -1	andi $4 $0 0	bnez $4 fail	and $4 $2 1	beqz $4 fail	and $4 $2 -1	bne $4 1 fail	and $4 $3 -1	bne $4 $3 fail	.databeq_:	.asciiz "Testing BEQ\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 beq_	syscall	li $2 -1	li $3 1	beq $0 $0 l1	j faill1:	beq $2 $2 l2	j faill2:	beq $3 $2 fail	beq $2 $2 far_away	# Check long branch	j failcome_back:	li $2 3l2_1:	sub $2 $2 1	bnez $2, l2_1	.databgez_:	.asciiz "Testing BGEZ\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bgez_	syscall	li $2 -1	li $3 1	bgez $0 l3	j faill3:	bgez $3 l4	j faill4:	bgez $2 fail	.databgezal_:.asciiz "Testing BGEZAL\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bgezal_	syscall	li $2 -1	li $3 1	bgezal $0 l5	j fail	bgezal $2 faill5:	bgezal $3 l6l55:	j faill6:	la $4 l55	bne $31 $4 fail	.databgtz_:	.asciiz "Testing BGTZ\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bgtz_	syscall	li $2 -1	li $3 1	bgtz $0 faill7:	bgtz $3 l8	j faill8:	bgtz $2 fail	.datablez_:	.asciiz "Testing BLEZ\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 blez_	syscall	li $2 -1	li $3 1	blez $0 l9	j faill9:	blez $2 l10	j faill10:	blez $3 fail	.databltz_:	.asciiz "Testing BLTZ\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bltz_	syscall	li $2 -1	li $3 1	bltz $0 faill11:	bltz $2 l12	j faill12:	bltz $3 fail	.databltzal_:.asciiz "Testing BLTZAL\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bltzal_	syscall	li $2 -1	li $3 1	bltzal $0 fail	bltzal $3 faill13:	bltzal $2 l15l14:	j faill15:	la $4 l14	bne $31 $4 fail	.databne_:	.asciiz "Testing BNE\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 bne_	syscall	li $2 -1	li $3 1	bne $0 $0 fail	bne $2 $2 fail	bne $3 $2 l16l16:	.databreak_:	.asciiz "Testing BREAK\nExpect a exception message:\n  "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 break_	syscall	break 3# COPz is not implemented or checked	.dataccp_:	.asciiz "Testing move to/from coprocessor control z\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 ccp_	syscall	li $2 0x7f7f	ctc0 $2 $3	cfc0 $4 $3	bne $2 $4 fail	li $2 0x7f7f	ctc1 $2 $3	cfc1 $4 $3	bne $2 $4 fail	li $2 0x7f7f	ctc2 $2 $3	cfc2 $4 $3	bne $2 $4 fail	li $2 0x7f7f	ctc3 $2 $3	cfc3 $4 $3	bne $2 $4 fail	.datadiv_:	.asciiz "Testing DIV\n"div2_:	.asciiz "Expect exception caused by divide by 0:\n  "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 div_	syscall	li $2 4	li $3 2	li $4 -2	div $5 $2 $3	bne $5 2 fail	mfhi $5	bne $5 0 fail	div $5 $2 $4	bne $5 -2 fail	mfhi $5	bne $5 0 fail	li $v0 4	# syscall 4 (print_str)	la $a0 div2_	syscall	div $5 $2 $0	.datadivu_:	.asciiz "Testing DIVU\n"divu2_:	.asciiz "Expect exception caused by divide by 0:\n  "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 divu_	syscall	li $2 4	li $3 2	li $4 -2	divu $5 $2 $3	bne $5 2 fail	mfhi $5	bne $5 0 fail	divu $0 $2 $3	mflo $5	bne $5 2 fail	mfhi $5	bne $5 0 fail	divu $5 $2 $4	bne $5 0 fail	mfhi $5	bne $5 4 fail	li $v0 4	# syscall 4 (print_str)	la $a0 divu2_	syscall	divu $5 $2 $0	.dataj_:	.asciiz "Testing J\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 j_	syscall	j l17	j fail	.ktext	nop		# These instructions aren't executed, but	j l17a		# cause parser errors since high 4 bitsl17a:			# don't match	j l17b	.textl17b:	nop	j l17a	# Correctly flagged as error here.l17:	.datajal_:	.asciiz "Testing JAL\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 jal_	syscall	jal l18l19:	j l20l18:	la $4 l19	bne $31 $4 fail	jr $31l20:	.datajalr_:	.asciiz "Testing JALR\n"jalr2_:	.asciiz "Expect an non-word boundary exception:\n  "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 jalr_	syscall	la $2 l21	jalr $3, $2l23:	j l22l21:	la $4 l23	bne $3 $4 fail	jr $3l22:	li $v0 4	# syscall 4 (print_str)	la $a0 jalr2_	syscall	la $2 l24	add $2 $2 2l24:	jalr $3 $2	.datajr_:	.asciiz "Testing JR\n"jr2_:	.asciiz "Expect an non-word boundary exception:\n  "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 jr_	syscall	la $2 l25	jr $2	j faill25:	li $v0 4	# syscall 4 (print_str)	la $a0 jr2_	syscall	la $2 l27	add $2 $2 2l27:	jr $2	.datala_:	.asciiz "Testing LA\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 la_	syscall	# Simple cases already tested	li $4 101	la $5 10($4)	bne $5 111 fail	.datalb_:	.asciiz "Testing LB\n"lb2_:	.asciiz "Expect an address error exceptions:\n	"lbd_:	.byte 1, -1, 0, 128lbd1_:	.word 0x76543210, 0xfedcba98	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lb_	syscall	la $2 lbd_	lb $3 0($2)	bne $3 1 fail	lb $3 1($2)	bne $3 -1 fail	lb $3 2($2)	bne $3 0 fail	lb $3 3($2)	bne $3 0xffffff80 fail	la $t0 lbd1_	lb $t1 0($t0)	bne $t1 0x10 fail	lb $t1 1($t0)	bne $t1 0x32 fail	lb $t1 2($t0)	bne $t1 0x54 fail	lb $t1 3($t0)	bne $t1 0x76 fail	lb $t1 4($t0)	bne $t1 0xffffff98 fail	lb $t1 5($t0)	bne $t1 0xffffffba fail	lb $t1 6($t0)	bne $t1 0xffffffdc fail	lb $t1 7($t0)	bne $t1 0xfffffffe fail	li $v0 4	# syscall 4 (print_str)	la $a0 lb2_	syscall	li $t5 0x7fffffff	lb $3 1000($t5)	.datalbu_:	.asciiz "Testing LBU\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lbu_	syscall	la $2 lbd_	lbu $3 0($2)	bne $3 1 fail	lbu $3 1($2)	bne $3 0xff fail	lbu $3 2($2)	bne $3 0 fail	lbu $3 3($2)	bne $3 128 fail	la $t0 lbd1_	lbu $t1 0($t0)	bne $t1 0x10 fail	lbu $t1 1($t0)	bne $t1 0x32 fail	lbu $t1 2($t0)	bne $t1 0x54 fail	lbu $t1 3($t0)	bne $t1 0x76 fail	lbu $t1 4($t0)	bne $t1 0x98 fail	lbu $t1 5($t0)	bne $t1 0xba fail	lbu $t1 6($t0)	bne $t1 0xdc fail	lbu $t1 7($t0)	bne $t1 0xfe fail	li $v0 4	# syscall 4 (print_str)	la $a0 lb2_	syscall	li $t5 0x7fffffff	lbu $3 1000($t5)	.datald_:	.asciiz "Testing LD\n"ld2_:	.asciiz "Expect four address error exceptions:\n"ldd_:	.word 1, -1, 0, 0x8000000	.text	li $v0 4	# syscall 4 (print_str)	la $a0 ld_	syscall	la $2 ldd_	ld $3 0($2)	bne $3 1 fail	bne $4 -1 fail	ld $3 8($2)	bne $3 0 fail	bne $4 0x8000000 fail	li $v0 4	# syscall 4 (print_str)	la $a0 ld2_	syscall	li $t5 0x7fffffff	ld $3 1000($t5)	ld $3 1001($t5)	.datalh_:	.asciiz "Testing LH\n"lh2_:	.asciiz "Expect two address error exceptions:\n"lhd_:	.half 1, -1, 0, 0x8000	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lh_	syscall	la $2 lhd_	lh $3 0($2)	bne $3 1 fail	lh $3 2($2)	bne $3 -1 fail	lh $3 4($2)	bne $3 0 fail	lh $3 6($2)	bne $3 0xffff8000 fail	li $v0 4	# syscall 4 (print_str)	la $a0 lh2_	syscall	li $t5 0x7fffffff	lh $3 1000($t5)	lh $3 1001($t5)	.datalhu_:	.asciiz "Testing LHU\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lhu_	syscall	la $2 lhd_	lhu $3 0($2)	bne $3 1 fail	lhu $3 2($2)	bne $3 0xffff fail	lhu $3 4($2)	bne $3 0 fail	lhu $3 6($2)	bne $3 0x8000 fail	li $v0 4	# syscall 4 (print_str)	la $a0 lh2_	syscall	li $t5 0x7fffffff	lhu $3 1000($t5)	lhu $3 1001($t5)	.datalui_:	.asciiz "Testing LUI\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lui_	syscall	lui $2 0	bne $2 $0 fail	lui $2 1	srl $2 $2 16	addiu $2 $2 -1	# Don't do compare directly since it uses LUI	bne $2 $0 fail	lui $2 1	andi $2 $2 0xffff	bne $2 $0 fail	lui $2 0xffff	srl $2 $2 16	addiu $2 $2 1	andi $2 $2 0xffff	bne $2 $0 fail	.datalw_:	.asciiz "Testing LW\n"lwd_:	.word 1, -1, 0, 0x8000000	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lw_	syscall	la $2 lwd_	lw $3 0($2)	bne $3 1 fail	lw $3 4($2)	bne $3 -1 fail	lw $3 8($2)	bne $3 0 fail	lw $3 12($2)	bne $3 0x8000000 fail	add $2 $2 12	lw $3 -12($2)	bne $3 1 fail	lw $3 -8($2)	bne $3 -1 fail	lw $3 -4($2)	bne $3 0 fail	lw $3 0($2)	bne $3 0x8000000 fail	li $v0 4	# syscall 4 (print_str)	la $a0 lh2_	syscall	li $t5 0x7fffffff	lw $3 1000($t5)	lw $3 1001($t5)	.datalwl_:	.asciiz "Testing LWL\n"	.align 2lwld_:	.byte 0 1 2 3 4 5 6 7	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lwl_	syscall	la $2 lwld_	move $3 $0	lwl $3 0($2)	bne $3 0 fail	move $3 $0	lwl $3 1($2)	bne $3 0x01000000 fail	li $3 5	lwl $3 1($2)	bne $3 0x01000005 fail	move $3 $0	lwl $3 2($2)	bne $3 0x02010000 fail	li $3 5	lwl $3 2($2)	bne $3 0x02010005 fail	move $3 $0	lwl $3 3($2)	bne $3 0x03020100 fail	li $3 5	lwl $3 3($2)	bne $3 0x03020100 fail	li $v0 4	# syscall 4 (print_str)	la $a0 lh2_	syscall	li $t5 0x7fffffff	lwl $3 1000($t5)	lwl $3 1001($t5)	.datalwr_:	.asciiz "Testing LWR\n"	.align 2lwrd_:	.byte 0 1 2 3 4 5 6 7	.text	li $v0 4	# syscall 4 (print_str)	la $a0 lwr_	syscall	la $2 lwrd_	li $3 0x00000500	lwr $3 0($2)	bne $3 0x3020100 fail	move $3 $0	lwr $3 1($2)	bne $3 0x30201 fail	li $3 0x50000000	lwr $3 1($2)	bne $3 0x50030201 fail	move $3 $0	lwr $3 2($2)	bne $3 0x0302 fail	li $3 0x50000000	lwr $3 2($2)	bne $3 0x50000302 fail	li $v0 4	# syscall 4 (print_str)	la $a0 lh2_	syscall	li $t5 0x7fffffff	lwr $3 1000($t5)	lwr $3 1001($t5)	.datamcp_:	.asciiz "Testing move to/from coprocessor z\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 mcp_	syscall	li $2 0x7f7f	mtc0 $2 $3	mfc0 $4 $3	bne $2 $4 fail	li $2 0x7f7f	mtc1 $2 $3	mfc1 $4 $f3	bne $2 $4 fail	li $2 0x7f7f	li $3 0xf7f7	mtc1.d $2 $4	mfc1.d $6 $4	bne $2 $6 fail	bne $3 $7 fail	li $2 0x7f7f	mtc2 $2 $3	mfc2 $4 $3	bne $2 $4 fail	li $2 0x7f7f	mtc3 $2 $3	mfc3 $4 $3	bne $2 $4 fail	.datahilo_:	.asciiz "Testing move to/from HI/LO\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 hilo_	syscall	mthi $0	mfhi $2	bnez $2 fail	mtlo $0	mflo $2	bnez $2 fail	li $2 1	mthi $2	mfhi $3	bne $3 $2 fail	li $2 1	mtlo $2	mflo $3	bne $3 $2 fail	li $2 -1	mthi $2	mfhi $3	bne $3 $2 fail	li $2 -1	mtlo $2	mflo $3	bne $3 $2 fail	.datamul_:	.asciiz "Testing MUL\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 mul_	syscall	li $2, 1	mul $3, $2, 0	bnez $3 fail	mul $3, $2, 1	bne $3 1 fail	mul $3, $2, 10	bne $3 10 fail	mul $2 $0 $0	bnez $2 fail	mfhi $3	bnez $3 fail	mflo $3	bnez $3 fail	li $4, 1	mul $2 $4 $4	bne $2 1 fail	mfhi $3	bnez $3 fail	mflo $3	bne $3 1 fail	li $4, -1	mul $2 $4 $4	bne $2 1 fail	mfhi $3	bnez $3 fail	mflo $3	bne $3 1 fail	li $4, -1	li $5, 1	mul $2 $4 $5	bne $2 -1 fail	mfhi $3	bne $3 -1 fail	mflo $3	bne $3 -1 fail	li $4, 0x10000	mul $2 $4 $4	bne $2 0 fail	mfhi $3	bne $3 1 fail	mflo $3	bne $3 0 fail	li $4, 0x80000000	mul $2 $4 $4	bne $2 0 fail	mfhi $3	bne $3 0x40000000 fail	mflo $3	bne $3 0 fail	.datamultu_:	.asciiz "Testing MULTU\n"	.text	li $v0 4	# syscall 4 (print_str)	la $a0 multu_	syscall	multu $0 $0	mfhi $3	bnez $3 fail	mflo $3	bnez $3 fail	li $4, 1	multu $4 $4	mfhi $3	bnez $3 fail	mflo $3	bne $3 1 fail	li $4, -1	multu $4 $4	mfhi $3	bne $3 0xfffffffe fail	mflo $3	bne $3 1 fail	li $4, -1	li $5, 0	multu $4 $5	mfhi $3	bne $3 0 fail	mflo $3	bne $3 0 fail	li $4, -1	li $5, 1	multu $4 $5	mfhi $3	bne $3 0 fail	mflo $3	bne $3 -1 fail	li $4, 0x10000	multu $4 $4	mfhi $3	bne $3 1 fail	mflo $3	bne $3 0 fail	li $4, 0x80000000	multu $4 $4	mfhi $3	bne $3 0x40000000 fail	mflo $3	bne $3 0 fail	li $3, 0xcecb8f27	li $4, 0xfd87b5f2	multu $3 $4	mfhi $3	bne $3 0xcccccccb fail	mflo $3	bne $3 0x7134e5de fail	.datamulo_:	.asciiz "Testing MULO\n"mulo1_:	.asciiz "Expect an exception:\n	 "	.text	li $v0 4	# syscall 4 (print_str)	la $a0 mulo_	syscall	mulo $2 $0 $0	bne $2 0 fail	li $4, 1	mulo $2 $4 $4	bne $2 1 fail	li $4, -1	mulo $2 $4 $4	bne $2 1 fail	li $4, -1	li $5, 1	mulo $2 $4 $5	bne $2 -1 fail	li $v0 4	# syscall 4 (print_str)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -