コード例 #1
0
 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])
コード例 #2
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)
コード例 #3
0
 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)
コード例 #4
0
 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            ')
コード例 #5
0
 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])
コード例 #6
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)
コード例 #7
0
 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)
コード例 #8
0
 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])
コード例 #9
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)
コード例 #10
0
 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])
コード例 #11
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)
コード例 #12
0
 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])
コード例 #13
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])
コード例 #14
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])
コード例 #15
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])
コード例 #16
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])
コード例 #17
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)
コード例 #18
0
 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)
コード例 #19
0
 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])
コード例 #20
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])
コード例 #21
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])
コード例 #22
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])
コード例 #23
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])
コード例 #24
0
 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])
コード例 #25
0
 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])
コード例 #26
0
 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])
コード例 #27
0
 def test_ORG_NEG4(self):
     with self.assertRaises(as240.SyntaxError):
         as240.AsmLine(' .ORG $1987,$200,$300',
                       line_number=11,
                       mem_address=502)
コード例 #28
0
 def test_SyntaxError(self):
     with self.assertRaises(as240.SyntaxError):
         a = as240.AsmLine(' BRA R1, R2', line_number=11, mem_address=502)
コード例 #29
0
 def test_DW_NEG1(self):
     with self.assertRaises(as240.SyntaxError):
         a = as240.AsmLine('LBL_DW2 .DW %EAX',
                           line_number=11,
                           mem_address=502)
コード例 #30
0
 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)