summaryrefslogtreecommitdiff
path: root/crenshaw
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2018-08-11 18:50:25 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2018-08-11 18:50:25 +0200
commit80a3db3cde0cf59245e87e44164013143537212e (patch)
treed221272afdb3479c5675a0ff7f801dac62cacedf /crenshaw
parent0300971e3bb7efa727c35ef54203a8ffe00eba9a (diff)
downloadcompilertests-80a3db3cde0cf59245e87e44164013143537212e.tar.gz
compilertests-80a3db3cde0cf59245e87e44164013143537212e.tar.bz2
ELF32 prologue, epilog, still using gcc/binutils
Diffstat (limited to 'crenshaw')
-rw-r--r--crenshaw/README11
-rw-r--r--crenshaw/main.pas13
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