Here is a listing of some moderately exhaustive test input for the example assembler you should write for MP1. The assignment did not dictate a listing format, so you could simply output the memory contents as a sequence of bytes instead of worrying about trying to make a professional looking listing like this! What maters is the values assembled into the different memory locations.
1 |; test.eal
2 |
3 |;------------------------------------------
4 |; example test input for the EAL assembler
5 |; author: Douglas Jones
6 |;------------------------------------------
7 |
8 0000: 00 | B 0 ; we test decimal constants
9 0001: 01 | B 1
10 0002: 0A | B 10 ; (as operands for B directives)
11 0003: 10 | B 16
12 0004: FF | B 255
13 0005: 00 | B #0 ; we test hexadecimal constants
14 0006: 01 | B #1
15 0007: 0A | B #A ; (as operands for W directives)
16 0008: 10 | B #10
17 0009: FF | B #FF
18 |
19 000A: FFFF | W 65535 ; we test words
20 000C: FFFF | W #FFFF
21 |
22 | A = 5 ; test definitions
23 | B = 6
24 |
25 000E: 05 | B A
26 000F: 06 | B B
27 |
28 |L: ; test labels
29 |
30 0010: 10 | B L
31 |
32 0011: 0000 |X: W 0 ; demonstrate labels on words
33 0013: 0011 |Y: W X
34 0015: 0013 | W Y
35 |
36 0017: 05 | B A ; show all the symbol values
37 0018: 06 | B B
38 0019: 10 | B L
39 001A: 11 | B X
40 001B: 13 | B Y
The above test input does not test forward references, and it does not
test long identifiers. The following test shows reasonable behavior
for both forward references and long identifiers:
1 |; testlong.eal
2 |
3 |;------------------------------------------
4 |; example test input for the EAL assembler
5 |; author: Douglas Jones
6 |;------------------------------------------
7 |
8 0000: 0002 | W AveryLongForwardIdentifier
9 |Backward:
10 0002: 04 | B Forward
11 |AVeryLongIdentifier = 1
12 |AveryLongForwardIdentifier = 2
13 0003: 02 | B Backward
14 |Forward:
15 0004: 0001 | W AVeryLongIdentifier
16 |
17 0006: 0003 | W AVeryLongIdentifer ; one letter
18 |AVeryLongIdentifer = 3 ; different!
None of the above tests dealt with the assembler's ability to handle
errors in the input. Here's a sample assembly listing demonstrating
clean handling of some syntax errors that can be easily detedted and
then going on to force a very strange string pool overflow:
1 |; testbad.eal
2 |
3 |;------------------------------------------
4 |; test error messages from EAL assembler
5 |; author: Douglas Jones
6 |;------------------------------------------
7 |
8 0000: 01 | B 1 3 5 ; extra operands
^
comment expected
9 | A = 1 3 5 ; extra operands
^
comment expected
10 0001: 00 | B ; missing operand
^
operand expected
11 | B = ; missing operand
^
operand expected
12 | C = & ; an odd operand?
^
operand expected
13 | D = #FG ; an odd digit?
^
comment expected
14 | E = 12A ; an odd digit?
^
comment expected
15 | X 1 ; not a proper pseudo-instruction
^
illegal opcode or pseudo-op
16 | & ; some nonsense
^
comment expected
17 |
18 |VeryLongIdentifiersCauseBigProblems = 1
19 |BecauseTheyFillUpTheStringPoolAnd = 2
20 |EventuallyItWillHoldNoMoreLetters = 3
21 |AndWhenThisHappensWeHopeForAnError = 4
22 |MessageInformingUsOfTheSituation = 5
23 |; SoThatWeCanUseMoreSensibleNames
^
string pool overflow
The fact that a string pool overflow was detected in line 23 of the
above listing is a strange and unintended result of strictly following
the assignment! A great homework problem would be to ask what the
cause of this error is!