• All instruc+ons (including opcodes and operand 'R') are in upper-case
• OPCODES are as per instruc+ons (if EC is considered then OPCODES can be anything
from the upper part of the Instruc+ons worksheet)
• OPERANDS are the registers in the format R[0-7]
• General format for the instruc+on line is: <space>*[OPCODE]<space>+
[OPERAND1](<space>*<comma><space>* | <space>+)
[OPERAND2](<space>*<comma><space>* | <space>+)
[OPERAND3]<space>*<\n>?
• Therefore: there can be
o 0 or more leading spaces, then
o OPCODE, then
o 1 or more spaces between OPCODE and the first OPERAND, then
o the first OPERAND, then
o EITHER 0 or more spaces followed by 1 comma followed by 0 or more spaces OR
1 or more spaces, then
o the second OPERAND, then
o EITHER 0 or more spaces followed by 1 comma followed by 0 or more spaces OR
1 or more spaces, then
o the third OPERAND or IMMEDIATE VALUE (for EC2), then
o 0 or more trailing spaces followed by 0 or 1 newline characters (‘\n’)
• End of line: there can be trailing spaces, newline symbol or just EOF (end of file) if it is
the last line in the .asm file (make sure that your code works for the file where the last
line doesn’t contain the newline character)
• Every line that is formaded not in accordance with the rules before should be treated as
erroneous thus the respec+ve error should be thrown, and the program should
gracefully terminate if such line is faced.
Examples (this is not and exhaus+ve list! You should handle all the cases, not only those, using
the rules above and those are for illustra+ve purposes only):
Valid Invalid
ADD R1, R2, R3
MUL R0 R1 R2
SUB R2, R4 R7
AND R7 , R5 R4
ADD R1R2,R3
MUL, R0, R1, R2
,SUB R2 R4 R7
AND R7,,R5 R4
Extra credit:
• EC1: cases required to add to complete it:
o line consis+ng of the comment only - star+ng with 0 or more leading spaces and
‘;’ - should be treated as comment and ignored (i.e. should not produce an error)
o the correct instruc+on followed by 0 or more spaces and ‘;’ should be treated as
normal instruc+on and the part star+ng with those 0 or more trailing spaces and
‘;’ should be just ignored. o empty lines between instruc+ons should be ignored.
o lines containing only spaces should be ignored.
• EC2: immediate values in decimal with “#” sign in front or hex with “0x” or “x” in front:
#-?[0-9]+ for decimal and 0?x[0-9a-fA-F]+ for hex. The immediate supported in ADD and
AND instruc+on is a 5-bit 2C number, so it is required to check the range of the input
immediate and raise an error if it is out of range. Hex numbers that formally occupy
more than 5 bits (i.e. xFF) should be treated as errors therefore there are only 16 op+ons
for hex numbers to be valid immediate values. Decimal number can be nega+ve too i.e.
both #-5 and #5 should be parsed correctly for example and give different results.
Decimal numbers occupying more than 5 bits in 2C nota+on should produce an error.
• EC3: Address is formaded as x4020 so it can be assumed that addresses are always in
xHHHH format. Check that the address is within the legal range - user memory for code
(0x0000~0x1FFF) and data (0x2000~0x7FFF) – should be performed. There’s no need to
bother with overlapping addresses (we won’t check that) but overflow needs to be
checked vs bounds: if the address is x1FFF and the respec+ve .CODE sec+on contains 2
instruc+ons – error (“overflow”) should be thrown. The same applies to the overflow of
the .DATA region.
• EC4: it requires the implementa+on of .DATA, .ADDR and .FILL (pseudo)-instruc+ons only
and also the processing of the respec+ve IMMEDIATE values (i.e. size can be different for
the different instruc+ons and signed and unsigned IMMs should be dis+nguished when
necessary).