Compiler for x86 Assembly that creates a listing file.
This is done as a coursework on a System Programming subject at the KPI university.
The task is to create a compiler that produces a listing file (.lst) like MASM or TASM compilers do.
Listing is a file that represents a machine code generated for assembly commands in a human-readable format.
This compiler supports a small set of the x86 assembly commands.
The orginal task is to implement the following assembly code (next is in Ukrainian):
Містять великі і малі букви латинского алфавіту та цифри. Починаються з букви. Великі та малі букви не відрізняються. Довжина ідентифікаторів не більше 4 символів
Шістнадцяткові, десяткові, двійкові та текстові константи
END, SEGMENT - без операндів, ENDS, ASSUME DB,DW,DD з одним операндом - константою (рядкові константи тільки для DB)
32 - розрядні дані та зміщення в сегменті, 16 -розрядні дані та зміщення не використовуються
Пряма адресація. Базова індексна адресація із множником ([edx+esi4],[ebx+ecx2] і т.п.) з оператором визначення типу (ptr) при необхідності.
Префікси заміни сегментів можуть задаватись тільки явно
Lahf
Sub reg, mem
Mov reg, reg
Cmp mem,reg
Adc mem,imm
Imul reg
And reg,imm
Jng
jmp (міжсегментна пряма та посередня адресація)
Де reg – 8 або 32-розрядні РЗП
mem – адреса операнда в пам’яті
imm - 8 або 32-розрядні безпосередні дані (константи)

