;=================================================================== ; test_t.asm (with test_d.asm) ; ; ÀÌ ÆÄÀÏÀº DLX ½Ã¹Ä·¹ÀÌÅ͸¦ Å×½ºÆ®Çϱâ À§ÇÑ °ÍÀ¸·Î¼­ ; Load, Store, Add, Sub, Mul, Div ¸í·É¾îÅ×½ºÆ®¿Í ; encodingÀÌ Á¦´ë·Î µÇ¾ú´ÂÁö checksum È®ÀÎÀ» ÇÔ ; (À̶§, opcodeºÎºÐÀº Á¤Çϱ⿡ µû¶ó ´Ù¸£¹Ç·Î Á¦¿ÜÇϰí ; ¶ÇÇÑ 'SRLI'´Â immediate °ªÀÌ 0-32·Î Á¦ÇÑÀûÀ̾ ; R-typeµµ °¡´ÉÇϹǷΠ°è»ê¿¡¼­ Á¦¿Ü¸¦ ÇÏ¿´À½) ; ; ¼öÇàÈÄ ErrBuffer (µ¥ÀÌÅÍ¿µ¿ª+116 (0x74))¿¡ 1,2,...,9,a,b °¡ ; ¾º¾îÁö¸é Á¤»óÀûÀÎ ¿Ï·áÀ̸ç, ¿¡·¯°¡ ÀÖ´Â °æ¿ì, 0x80ÀÌ °¢ ¼ýÀÚ¿¡ ; ´õÇØÁ®¼­ ±â·ÏµÈ´Ù. ; ; DLX°¡ resetµÇ¸é PC´Â 0x100·Î ÀÚµ¿ ¸®¼ÂµÇ´Â °ÍÀ¸·Î °¡Á¤ÇÏ°í µû¶ó¼­ ; ".text"ÀÇ °æ¿ì default ÁÖ¼Ò·Î 0x100, ".data"´Â default=0x1000·Î ; °¡Á¤ÇÏ¿´À¸³ª °¢ÀÚ°¡ Á¤ÀÇÇÑ ¹Ù¿¡ µû¶ó ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ; ÇÁ·Î±×·¥ÀÇ Á¾·á´Â 'trap 0'¸¦ ¼öÇàÇÏ¸é ³¡³ª´Â °ÍÀ¸·Î ÇÏ¿´À¸³ª ; °¢ÀÚ°¡ Á¤ÀÇÇÑ ¹Ù¿¡ µû¶ó ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ; ; Á¦Ã⺸°í¼­¿¡´Â º» Å×½ºÆ®ÇÁ·Î±×·¥ÀÇ ¼öÇà°á°úµµ Æ÷ÇÔ½Ã۵µ·Ï Çϰí ; Invalid opcode, Divide-by-zeroµîÀÇ run-time error¿Í ; Larger than accepted immediate value (eg.LHI R1,0x10000)µîÀÇ ; assembly error¸¦ Á¦´ë·Î ã¾Æ³»´ÂÁö µî¿¡ ´ëÇÑ ³»¿ëµµ Æ÷ÇÔ½Ã۵µ·Ï ÇÑ´Ù. ; ;==================================================================== .text main: ; setup error write position ADDUI R27, R0, TempBuffer ADDUI R29, R0, #1 ADDUI R30, R0, ErrBuffer ; test R0 XOR R0, R0, R0 ADDI R0, R0, #1 BEQZ R0, cont1 ADDUI R29, R29, #0x80 cont1: JAL Error_Write ; test LB/SB ADDUI R28, R0, LbTest LH R1, 0(R28) LHU R2, 0(R28) XOR R3, R1, R2 BEQZ R3, cont2 ADDUI R29, R29, #0x80 cont2: JAL Error_Write LB R1, 2(R28) LBU R2, 2(R28) XOR R3, R1, R2 ORI R3, R3, #0xff ADDI R3, R3, #1 BEQZ R3, cont3 ADDUI R29, R29, #0x80 cont3: JAL Error_Write LW R1, 4(R28) SH 0(R27), R1 miss1: SRLI R2, R1, #16 SB 2(R27), R2 miss2: SRLI R3, R2, #8 SB 3(R27), R3 LW R2, 0(R27) LW R3, 8(R28) SEQ R4, R2, R3 BNEZ R4, cont4 ADDUI R29, R29, #0x80 cont4: JAL Error_Write ; test add/sub ADDUI R28, r0, AddTest LB R1, 0(R28) LB R2, 1(R28) ADD R3, R1, R2 SEQI R4, R3, #3 BNEZ R4, cont5 ADDUI R29, R29, #0x80 cont5: JAL Error_Write LH R1, 2(R28) LH R2, 4(R28) ADD R3, R1, R2 SEQI R4, R3, #-3 BNEZ R4, cont6 ADDUI R29, R29, #0x80 cont6: JAL Error_Write LBU R1, 6(R28) LBU R2, 7(R28) ADDU R3, R1, R2 SEQI R4, R3, #247 BNEZ R4, cont7 ADDUI R29, R29, #0x80 cont7: JAL Error_Write LHU R1, 8(R28) ADDUI R3, R1, #1 SEQI R4, R3, #201 BNEZ R4, cont8 ADDUI R29, R29, #0x80 cont8: JAL Error_Write ; test mult/div ADDUI R28, R0, MultTest LB R1, 0(R28) LB R2, 1(R28) MULT R3, R1, R2 SEQI R4, R3, #-5640 BNEZ R4, cont9 ADDUI R29, R29, #0x80 cont9: JAL Error_Write LB R1, 2(R28) LB R2, 3(R28) DIV R3, R1, R2 SEQI R4, R3, #2 BNEZ R4, cont10 ADDUI R29, R29, #0x80 cont10: JAL Error_Write ; test decoding ADDUI R28, R0, DecTest ADDUI R1, R0, main ADDUI R2, R0, cont10 LW R3, 0(R28) ADD R10, R0, r0 ADDUI R11, R0, miss1 ADDUI R12, R0, miss2 loop: SEQ R5, R1, R11 BNEZ R5, next_inst SEQ R5, R1, R12 BNEZ R5, next_inst LW R6, 0(R1) SRLI R7, R6, #26 BNEZ R7, not_00op AND R6, R6, R3 not_00op: ADDU R10, R10, R6 next_inst: ADDUI R1, R1, #4 SEQ R5, R1, R2 BEQZ R5, loop LW R9, 4(R28) SEQ R8, R9, R10 BNEZ R8, cont11 ADDUI R29, R29, #0x80 cont11: JAL Error_Write trap 0 Error_Write: SB 0(R30), R29 SGTI R1, R29, #0x80 BEQZ R1, w_end SUBUI R29, R29, #0x80 w_end: ADDUI R30, R30, #1 ADDUI R29, R29, #1 JR R31