First:
Most of the lists of instruction opcodes you will find will be in hex. I suggest you convert them to binary so that you will see some special relationships between certain instructions. Better yet, find one with those relationships already shown in the binary code numbers. I have a manual for Masm v.5.00 and it contains that info.
Second:
I suggest you limit yourself to assembly into DOS *.com format.
Third:
Implement a memory-based database with the following characteristics:
Three fields:
Text Field (variable-length!!!)
Type Field (one byte will do)
Numeric Field (Four bytes, one dword)
VERY SMALL SIZE
SEARCH VIA TEXT FIELD
This database will contain the labels of the assembly file. Text Field will contain the name of the label, Type Field the type, Numeric Field the value.
Fourth:
Make sure you know what types your label might be. Is it an address?
address db 12 ;data address
address: ;code address
A numeric constant value?
constant EQU 32
A string constant value?
s-constant EQU <string>
REMEMBER:
mov ax,label
can assemble to two different things! It might mean, load the value of label into ax (since it was defined as EQU), or load the memory area pointed to by label into ax (since it was defined using db or dw or whatnot).
Assign each type you can think of with a separate value for the Type Field of your label database. Mind you, the label database NEEDS a variable length Text Field.
Five:
TIME. Give yourself that. Don't tell me you need it in a month, unless you cheat and get someone else's assembler, you can't do that. Give yourself some three months at the least, maybe more if you feel it difficult.
Six:
Good Luck and Have Fun!
"Information has a tendency to be free. Which means someone will always tell you something you don't want to know."