diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-11 18:50:25 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-11 18:50:25 +0200 |
commit | 80a3db3cde0cf59245e87e44164013143537212e (patch) | |
tree | d221272afdb3479c5675a0ff7f801dac62cacedf /crenshaw | |
parent | 0300971e3bb7efa727c35ef54203a8ffe00eba9a (diff) | |
download | compilertests-80a3db3cde0cf59245e87e44164013143537212e.tar.gz compilertests-80a3db3cde0cf59245e87e44164013143537212e.tar.bz2 |
ELF32 prologue, epilog, still using gcc/binutils
Diffstat (limited to 'crenshaw')
-rw-r--r-- | crenshaw/README | 11 | ||||
-rw-r--r-- | crenshaw/main.pas | 13 |
2 files changed, 22 insertions, 2 deletions
diff --git a/crenshaw/README b/crenshaw/README index 1047944..0d1e58d 100644 --- a/crenshaw/README +++ b/crenshaw/README @@ -1,4 +1,13 @@ fpc main.pas ./main < test.prog > test.asm -nasm test.asm -f bin -o test.bin +nasm -f elf32 test.asm +gcc -m32 -o test test.o ndisasm -b32 test.bin +./test + +#gdb ./test +#(gdb) set disassemble-next-line on +#(gdb) start +#(gdb) si +#(gdb) info registers + diff --git a/crenshaw/main.pas b/crenshaw/main.pas index a5f42ae..eff412c 100644 --- a/crenshaw/main.pas +++ b/crenshaw/main.pas @@ -67,6 +67,10 @@ begin WriteLn; end; +procedure EmitLabel(s : string); +begin; + WriteLn(s+':'); +end; procedure Term; begin @@ -105,11 +109,18 @@ end; procedure Prologue; begin - EmitLn('[bits 32]'); + WriteLn('[bits 32]'); + WriteLn('section .text'); + WriteLn('global main'); + EmitLabel('main'); + EmitLn('push ebp'); + EmitLn('mov ebp, esp'); end; procedure Epilogue; begin + EmitLn('leave'); + EmitLn('ret'); end; begin |