diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-12 08:18:59 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2018-08-12 08:18:59 +0200 |
commit | 8a4cfc2e63cc21328dbffd11d1a0455d806d48ef (patch) | |
tree | e1d920a76f0be9c68856f123d5f0927215e42213 /crenshaw | |
parent | 5eafed8deddd17392cdf6ca1a6d304b24fa1cba8 (diff) | |
download | compilertests-8a4cfc2e63cc21328dbffd11d1a0455d806d48ef.tar.gz compilertests-8a4cfc2e63cc21328dbffd11d1a0455d806d48ef.tar.bz2 |
crenshaw: added brakets
Diffstat (limited to 'crenshaw')
-rw-r--r-- | crenshaw/README | 15 | ||||
-rwxr-xr-x | crenshaw/build.sh | 7 | ||||
-rw-r--r-- | crenshaw/main.pas | 21 | ||||
-rw-r--r-- | crenshaw/test.prog | 2 |
4 files changed, 27 insertions, 18 deletions
diff --git a/crenshaw/README b/crenshaw/README index 7bad3b5..f95033f 100644 --- a/crenshaw/README +++ b/crenshaw/README @@ -1,14 +1,15 @@ -fpc main.pas -./main < test.prog > test.asm -nasm -f elf32 test.asm -gcc -m32 -march=i486 -ffreestanding -o test test.o -objcopy -O binary --only-section=.text test test.bin -ndisasm -b32 test.bin -./test +debugging #gdb ./test #(gdb) set disassemble-next-line on +#(gdb) display $eax +#(gdb) display $ebx #(gdb) start #(gdb) si #(gdb) info registers +links + +https://en.wikibooks.org/wiki/68000_Assembly +https://en.wikipedia.org/wiki/X86_instruction_listings +file:///media/sd/compilertests/doc/Intel 80x86 Assembly Language OpCodes.html#div diff --git a/crenshaw/build.sh b/crenshaw/build.sh new file mode 100755 index 0000000..5ef9938 --- /dev/null +++ b/crenshaw/build.sh @@ -0,0 +1,7 @@ +fpc main.pas +./main < test.prog > test.asm +nasm -f elf32 test.asm +gcc -m32 -march=i486 -ffreestanding -o test test.o +objcopy -O binary --only-section=.text test test.bin +ndisasm -b32 test.bin +./test diff --git a/crenshaw/main.pas b/crenshaw/main.pas index 12fec6e..04a3624 100644 --- a/crenshaw/main.pas +++ b/crenshaw/main.pas @@ -72,10 +72,17 @@ begin; WriteLn(s+':'); end; +procedure Expression; Forward; + procedure Factor; begin - EmitLn('mov eax, ' + GetNum); - EmitLn('push eax'); + if Look = '(' then begin + Match('('); + Expression; + Match(')'); + end + else + EmitLn('mov eax, ' + GetNum); end; procedure Multiply; @@ -83,9 +90,7 @@ begin Match('*'); Factor; EmitLn('pop ebx'); - EmitLn('pop eax'); EmitLn('mul ebx'); - EmitLn('push eax'); end; procedure Divide; @@ -93,9 +98,7 @@ begin Match('/'); Factor; EmitLn('pop ebx'); - EmitLn('pop eax'); EmitLn('div ebx'); - EmitLn('push eax'); end; procedure Term; @@ -103,6 +106,7 @@ begin Factor; while Look in ['*', '/'] do begin + EmitLn('push eax'); case Look of '*': Multiply; '/': Divide; @@ -116,9 +120,7 @@ begin; Match('+'); Term; Emitln('pop ebx'); - EmitLn('pop eax'); EmitLn('add eax, ebx'); - EmitLn('push eax'); end; procedure Subtract; @@ -126,9 +128,7 @@ begin; Match('-'); Term; EmitLn('pop ebx'); - EmitLn('pop eax'); EmitLn('sub eax, ebx'); - EmitLn('push eax'); end; procedure Expression; @@ -136,6 +136,7 @@ begin Term; while Look in ['+', '-'] do begin + EmitLn('push eax'); case Look of '+': Add; '-': Subtract; diff --git a/crenshaw/test.prog b/crenshaw/test.prog index 95b87fe..a1d75c4 100644 --- a/crenshaw/test.prog +++ b/crenshaw/test.prog @@ -1,2 +1,2 @@ -4+4*3/2-3 +(4+4)*3/2-3 |