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 YThe 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 overflowThe 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!