def test_DW3(self): ''' The operand for a .DW can be a label. ''' e = as240.AsmLine('LBL_DW5 .EQU $1987', line_number=9, mem_address=510) e.assemble() a = as240.AsmLine('LBL_DW6 .DW LBL_DW5', line_number=10, mem_address=510) a.assemble() locs = a.mem_locs() self.assertTupleEqual((510, 0x1987), locs[0])
def test_TwoOpcodes(self): a = as240.AsmLine(' MV R7 , R0', line_number=10, mem_address=502) self.assertEqual(a.next_mem_address(), 504) a.assemble() s = str(a) t = '01F6 21C0' + ' ' * 13 + 'MV' + ' ' * 6 + 'R7 R0 ' self.assertEqual(s, t)
def test_ThreeOpcodes(self): a = as240.AsmLine(' ADD R2,R4,R1', line_number=10, mem_address=504) self.assertEqual(a.next_mem_address(), 506) a.assemble() s = str(a) t = '01F8 00A1' + ' ' * 13 + 'ADD' + ' ' * 5 + 'R2 R4 R1' self.assertEqual(s, t)
def test_ZeroOpcodes(self): a = as240.AsmLine(' STOP', line_number=10, mem_address=500) next_mem_address = a.next_mem_address() self.assertEqual(next_mem_address, 502) a.assemble() s = str(a) self.assertEqual(s, '01F4 FE00' + ' ' * 13 + 'STOP ')
def test_DW2(self): a = as240.AsmLine(' .DW $2000', line_number=10, mem_address=504) self.assertEqual(a.next_mem_address(), 506) a.assemble() t = FORMAT_1.format('01F8', '2000', '', '.DW', '$2000') self.assertEqual(str(a), t) locs = a.mem_locs() self.assertTupleEqual((504, 8192), locs[0])
def test_LabelZeroOpcodes(self): a = as240.AsmLine('aLabel STOP', line_number=10, mem_address=500) self.assertEqual(a.next_mem_address(), 502) a.assemble() s = str(a) t = '01F4 FE00 ALABEL' + ' ' * 5 + 'STOP' + ' ' * 12 self.assertEqual(s, t) mem_val = as240.SymbolTable.lookup_label('ALABEL', line_number=10) self.assertEqual(mem_val, 500)
def test_OneOpcode(self): a = as240.AsmLine(' BRA $2000', line_number=10, mem_address=502) self.assertEqual(a.next_mem_address(), 506) a.assemble() s = str(a) t = '01F6 F800' + ' ' * 13 + 'BRA' + ' ' * 13 t += '\n' t += '01F8 2000' + ' ' * 21 + '$2000 ' self.assertEqual(s, t)
def test_DW(self): a = as240.AsmLine('LBL_DW1 .DW $1987', line_number=10, mem_address=502) self.assertEqual(a.next_mem_address(), 504) a.assemble() t = FORMAT_1.format('01F6', '1987', 'LBL_DW1', '.DW', '$1987') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('LBL_DW1', line_number=10) self.assertEqual(mem_val, 502) locs = a.mem_locs() self.assertTupleEqual((502, 6535), locs[0])
def test_EQU(self): a = as240.AsmLine('LBL_EQU1 .EQU $1987', line_number=10, mem_address=508) self.assertEqual(a.next_mem_address(), 508) # EQU doesn't take up memory a.assemble() self.assertEqual(str(a), '') #EQU doesn't show up in the listing mem_val = as240.SymbolTable.lookup_label('LBL_EQU1', line_number=10) self.assertEqual(mem_val, 6535)
def test_DW_zero_bug(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine(' .DW $0000', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '0000', '', '.DW', '$0000') self.assertEqual(str(a), t) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0), locs[0])
def test_LabelOneOpcode(self): a = as240.AsmLine('bLabel BRA $3000', line_number=10, mem_address=502) self.assertEqual(a.next_mem_address(), 506) a.assemble() s = str(a) t = '01F6 F800 BLABEL' + ' ' * 5 + 'BRA' + ' ' * 13 t += '\n' t += '01F8 3000' + ' ' * 21 + '$3000 ' self.assertEqual(s, t) mem_val = as240.SymbolTable.lookup_label('BLABEL', line_number=10) self.assertEqual(mem_val, 502)
def test_SRL(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_SRL1 SRL R1,R2,R3', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), 'E053', 'L_SRL1', 'SRL', 'R1 R2 R3') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_SRL1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b1110_000_001_010_011), locs[0])
def test_AND(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_AND1 AND R3,R1,R6', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '90CE', 'L_AND1', 'AND', 'R3 R1 R6') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_AND1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0x90CE), locs[0])
def test_SLT(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_SLT1 SLT R1,R6,R2', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '5072', 'L_SLT1', 'SLT', 'R1 R6 R2') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_SLT1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b0101_000_001_110_010), locs[0])
def test_SUB(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_SUB1 SUB R6,R7,R0', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '11B8', 'L_SUB1', 'SUB', 'R6 R7 R0') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_SUB1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b0001_000_110_111_000), locs[0])
def test_XOR(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_XOR1 XOR R6,R4,R3', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), 'B1A3', 'L_XOR1', 'XOR', 'R6 R4 R3') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_XOR1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b1011_000_110_100_011), locs[0])
def test_LabelTwoOpcodes(self): a = as240.AsmLine('cLabel LI R1,$1234', line_number=10, mem_address=506) self.assertEqual(a.next_mem_address(), 510) a.assemble() s = str(a) t = '01FA 3040 CLABEL' + ' ' * 5 + 'LI' + ' ' * 6 + 'R1 ' t += '\n' t += '01FC 1234' + ' ' * 21 + '$1234 ' self.assertEqual(s, t) mem_val = as240.SymbolTable.lookup_label('CLABEL', line_number=10) self.assertEqual(mem_val, 506)
def test_LabelThreeOpcodes(self): a = as240.AsmLine('dLabel LW R7 , R0 , $1234', line_number=10, mem_address=508) self.assertEqual(a.next_mem_address(), 512) a.assemble() s = str(a) t = '01FC 29C0 DLABEL' + ' ' * 5 + 'LW' + ' ' * 6 + 'R7 R0 ' t += '\n' t += '01FE 1234' + ' ' * 21 + '$1234 ' self.assertEqual(s, t) mem_val = as240.SymbolTable.lookup_label('DLABEL', line_number=10) self.assertEqual(mem_val, 508)
def test_STOP(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_STOP1 STOP ', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), 'FE00', 'L_STOP1', 'STOP', '') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_STOP1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b1111_111_000_000_000), locs[0])
def test_NOT(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 asm_string = 'L_NOT1 NOT R7,R7' a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '81F8', 'L_NOT1', 'NOT', 'R7 R7') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_NOT1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b1000_000_111_111_000), locs[0])
def test_MV(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 asm_string = 'L_MV1 MV R5,R4' a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 2) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '2160', 'L_MV1', 'MV', 'R5 R4') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_MV1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0x2160), locs[0])
def test_ADDI(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 a = as240.AsmLine('L_ADDI1 ADDI R1,R2,$1000', line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 4) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '3050', 'L_ADDI1', 'ADDI', 'R1 R2') t += '\n' t += FORMAT_1.format(hex_string4(mem_address + 2), '1000', '', '', '$1000') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_ADDI1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0x3050), locs[0])
def test_LW_ZERO(self): ''' Check when an immediate is set to zero. ''' mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 asm_string = 'L_LW2 LW R1,R7,$00' a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 4) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '2878', 'L_LW2', 'LW', 'R1 R7') t += '\n' t += FORMAT_1.format(hex_string4(mem_address + 2), '0000', '', '', '$00') self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_LW2', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b0010_100_001_111_000), locs[0]) self.assertTupleEqual((mem_address + 2, 0x0000), locs[1])
def test_SW(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 imm = random.randrange(0, 0x8000) * 2 imm_string = hex_string4(imm) imm_string_dollar = '$' + imm_string asm_string = 'L_SW1 SW R5, R7,${}'.format(imm_string) a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 4) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), '382F', 'L_SW1', 'SW', 'R5 R7') t += '\n' t += FORMAT_1.format(hex_string4(mem_address + 2), imm_string, '', '', imm_string_dollar) self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_SW1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b0011_100_000_101_111), locs[0]) self.assertTupleEqual((mem_address + 2, imm), locs[1])
def test_SRLI(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 shamt = random.randrange(0, 0x10) shamt_string = hex_string4(shamt) shamt_string_dollar = '$' + shamt_string asm_string = 'L_SRLI1 SRLI R4, R5,${}'.format(shamt_string) a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 4) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), 'E328', 'L_SRLI1', 'SRLI', 'R4 R5') t += '\n' t += FORMAT_1.format(hex_string4(mem_address + 2), shamt_string, '', '', shamt_string_dollar) self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_SRLI1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0b1110_001_100_101_000), locs[0]) self.assertTupleEqual((mem_address + 2, shamt), locs[1])
def test_BRZ(self): mem_address = random.randrange(0, 0x8000) * 2 line_number = 10 dst_address = random.randrange(0, 0x8000) * 2 dst_string = hex_string4(dst_address) dst_string_dollar = '$' + dst_string asm_string = 'L_BRZ1 BRZ ${}'.format(dst_string) a = as240.AsmLine(asm_string, line_number, mem_address) self.assertEqual(a.next_mem_address(), mem_address + 4) a.assemble() t = FORMAT_1.format(hex_string4(mem_address), 'C800', 'L_BRZ1', 'BRZ', '') t += '\n' t += FORMAT_1.format(hex_string4(mem_address + 2), dst_string, '', '', dst_string_dollar) self.assertEqual(str(a), t) mem_val = as240.SymbolTable.lookup_label('L_BRZ1', line_number) self.assertEqual(mem_val, mem_address) locs = a.mem_locs() self.assertTupleEqual((mem_address, 0xC800), locs[0]) self.assertTupleEqual((mem_address + 2, dst_address), locs[1])
def test_ORG_NEG4(self): with self.assertRaises(as240.SyntaxError): as240.AsmLine(' .ORG $1987,$200,$300', line_number=11, mem_address=502)
def test_SyntaxError(self): with self.assertRaises(as240.SyntaxError): a = as240.AsmLine(' BRA R1, R2', line_number=11, mem_address=502)
def test_DW_NEG1(self): with self.assertRaises(as240.SyntaxError): a = as240.AsmLine('LBL_DW2 .DW %EAX', line_number=11, mem_address=502)
def test_DW_NEG3(self): with self.assertRaises(as240.SyntaxError): a = as240.AsmLine('LBL_DW4 .DW $2000, $200, $300', line_number=11, mem_address=502)