diff --git a/cMIPS/tests/teq_lw.expected b/cMIPS/tests/teq_lw.expected
new file mode 100644
index 0000000000000000000000000000000000000000..9daad7c531bf72d29d2419bb654a6adfc1882608
Binary files /dev/null and b/cMIPS/tests/teq_lw.expected differ
diff --git a/cMIPS/tests/teq_lw.s b/cMIPS/tests/teq_lw.s
new file mode 100644
index 0000000000000000000000000000000000000000..0a60c182e0e85a6061821b01252b982688965b50
--- /dev/null
+++ b/cMIPS/tests/teq_lw.s
@@ -0,0 +1,175 @@
+	# mips-as -O0 -EL -mips32r2
+	.include "cMIPS.s"
+	.text
+	.align 2
+	.set noreorder        # assembler should not reorder instructions
+	.global _start
+	.global _exit
+	.global exit
+	.ent    _start
+
+	##
+	## reset leaves processor in kernel mode, all else disabled
+	##
+_start: nop
+	li   $sp,(x_DATA_BASE_ADDR+x_DATA_MEM_SZ-8) # initialize SP: ramTop-8
+
+        ## set STATUS, cop0, no interrupts enabled
+	li   $k0, 0x10000000
+        mtc0 $k0, cop0_STATUS
+	
+	j   main 
+	nop
+exit:	
+_exit:	nop	 # flush pipeline
+	nop
+	nop
+	nop
+	nop
+	wait     #   and then stop VHDL simulation
+	nop
+	nop
+	.end _start
+
+	
+        .org x_EXCEPTION_0000,0
+_excp_0000:
+        la   $k0, x_IO_BASE_ADDR
+        mfc0 $k1, cop0_CAUSE
+        sw   $k1, 0($k0)        # print CAUSE, flush pipe and stop simulation
+        nop
+        nop
+        nop
+        wait 0x01
+        nop
+        .org x_EXCEPTION_0100,0
+_excp_0100:
+        la   $k0, x_IO_BASE_ADDR
+        mfc0 $k1, cop0_CAUSE
+        sw   $k1, 0($k0)        # print CAUSE, flush pipe and stop simulation
+        nop
+        nop
+        nop
+        wait 0x02
+        nop
+
+	
+	.org x_EXCEPTION_0180,0 # exception vector_180
+	.ent _excp_180
+excp_180:	
+_excp_180:
+	##
+	## print CAUSE
+	##
+        mfc0  $k0, cop0_CAUSE
+	andi  $k1, $k0, 0x0030
+	srl   $k1, $k1, 4
+	addi  $k1, $k1, '0'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+	andi  $k1, $k0, 0x000f		# keep only exception code
+	addi  $k1, $k1, '0'
+	sw    $k1, x_IO_ADDR_RANGE($15) # print CAUSE.exCode
+	li    $k1, '\n'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+
+	mfc0  $k1, cop0_EPC		# move EPC forward one instruction
+	addi  $k1, $k1, 4
+	mtc0  $k1, cop0_EPC
+
+	mfc0  $k0, cop0_STATUS		# go back to user mode, EXL=0
+	li    $k1, -16                  # ffff.fff0
+	and   $k0, $k0, $k1
+	mtc0  $k0, cop0_STATUS
+
+	eret
+	.end _excp_180
+
+
+	.org x_EXCEPTION_0200,0
+	.ent _excp_200
+excp_200:			
+_excp_200:
+	##
+	## this exception should not happen
+	##
+	li   $28,-1
+	sw   $28, 0($15)       # signal exception to std_out
+        mfc0 $k0, cop0_CAUSE
+	li    $k1, 'e'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+	li    $k1, 'r'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+	li    $k1, 'r'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+	li    $k1, '\n'
+	sw    $k1, x_IO_ADDR_RANGE($15)
+	sw   $k0, 0($15)       # print CAUSE
+	eret                   #   and return
+	nop
+	.end _excp_200
+
+
+        .org x_EXCEPTION_BFC0,0
+_excp_BFC0:
+        la   $k0, x_IO_BASE_ADDR
+        mfc0 $k1, cop0_CAUSE
+        sw   $k1, 0($k0)        # print CAUSE, flush pipe and stop simulation
+        nop
+        nop
+        nop
+        wait 0x04
+        nop
+
+
+	##
+	##================================================================
+	##
+	.org x_ENTRY_POINT,0
+main:	la    $15, x_IO_BASE_ADDR # print out address (simulator's stdout)
+	la    $16, x_DATA_BASE_ADDR
+	##
+	## do a trap in a load delay slot
+	##
+	li   $9, '\n'
+	sw   $9, x_IO_ADDR_RANGE($15)     # print out '\n' to separate tests
+	li   $3, '!'		# put something on $3 and store it
+	sw   $3, 0($16)
+	nop
+	lw   $5, 0($16)		# load it back
+	teq  $0,$0		#  then trap (does not modify $5)
+	addi $5, $5, 4		#    then change it to '%'
+	nop
+	sw   $5, x_IO_ADDR_RANGE($15)  # print out '%'
+	li   $9, '\n'
+	sw   $9, x_IO_ADDR_RANGE($15)  # print out '%'
+	nop
+	nop
+	nop
+	nop
+	nop
+
+check3: li  $9, '%'
+	bne $5, $9, wrong1
+	nop
+	li  $9,  'o'
+	sw  $9,  x_IO_ADDR_RANGE($15)
+	li  $9,  'k'
+	sw  $9,  x_IO_ADDR_RANGE($15)
+	sw  $31, x_IO_ADDR_RANGE($15)     # print out '\n' to separate tests
+	li  $9, '\n'
+	sw  $9,  x_IO_ADDR_RANGE($15)
+	j   exit
+	sw  $9,  x_IO_ADDR_RANGE($15)
+	
+	
+wrong1: sw  $5, x_IO_ADDR_RANGE($15)
+	li  $9, 'e'
+	sw  $9, x_IO_ADDR_RANGE($15)
+	li  $9, 'r'
+	sw  $9, x_IO_ADDR_RANGE($15)
+	sw  $9, x_IO_ADDR_RANGE($15)
+	li  $9, '\n'
+	sw  $9,  x_IO_ADDR_RANGE($15)
+	j   exit
+	sw  $9,  x_IO_ADDR_RANGE($15)
+