From 2507f4b19677e73521e1f03b3a915e1d0c5fcee1 Mon Sep 17 00:00:00 2001 From: pommicket Date: Sat, 13 Nov 2021 14:13:16 -0500 Subject: return, reserve, align --- 03/ex03 | 8 ++-- 03/in02 | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 03/in03 | 4 ++ 3 files changed, 150 insertions(+), 4 deletions(-) diff --git a/03/ex03 b/03/ex03 index 90ab070..2301b33 100644 --- a/03/ex03 +++ b/03/ex03 @@ -16,12 +16,12 @@ x4b :label 1B=C ; :l ba b -;J=d0 +J=d0 A=d60 syscall x3c -;;;;;;;;;;;;;;;;;;;;;;;align +align :label -;;;;;;;;;;;;;;;;;;;;;;;reserve d1000 +reserve d1000 B+=J B<=d9 B-=J @@ -30,7 +30,7 @@ B-=J ?A>B:label A=:label x3c -;;;;;;;;;;;;;;;;;;;;;;;return +return ;;;;;;;;;;;;;;;;;;;;;;;*- ;;;;;;;;;;;;;;;;;;;;;;;/- ;;;;;;;;;;;;;;;;;;;;;;;*+ diff --git a/03/in02 b/03/in02 index 7a55324..0eb608b 100644 --- a/03/in02 +++ b/03/in02 @@ -233,6 +233,51 @@ im ##1. je :-st +im +--RE "reserve" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-re +im +##a. +CA set '\n' as terminator +im +--RT "return" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-rt +im +--AL "align" +IA +im +--LI +JA +im +--s= +cl +BA +im +##1. +je +:-al jm :-ex // handle += instruction @@ -1834,6 +1879,30 @@ im cl jm :-rl next line +// handle "reserve " +::re +im +##8. +BA +im +--LI ++B +BA +im +--nu +cl +IA offset +im +##4. output fd +JA +im +##1. whence = SEEK_CUR +DA +im +##8. syscall 8 = lseek +sy +jm +:-rl next line // handle "syscall " ::sy im @@ -2047,6 +2116,55 @@ jm ::x$ AJ re return +// deal with "return" +::rt +im +--Rt +IA +im +##1. +DA +im +--wr +cl +jm +:-rl next line +// deal with "align" +::al +// first get current address +im +##4. output fd +JA +zA +IA offset = 0 +im +##1. whence = SEEK_CUR +DA +im +##8. syscall 8 = lseek +sy +BA +im +##8. ++B +BA +im +##fffffffffffffff8. +&B +// okay rax now holds address we should seek to +IA offset +zA +DA whence = SEEK_SET +im +##4. output fd +JA +im +##8. lseek +sy +jm +:-rl next line +::Rt +re // bad instruction ::!i im @@ -2169,6 +2287,30 @@ jm 't 'r 20 +::RE "reserve" text +'r +'e +'s +'e +'r +'v +'e +20 +::RT "return" text +'r +'e +'t +'u +'r +'n +\n +::AL "align" text +'a +'l +'i +'g +'n +\n ::IF input file name 'i 'n diff --git a/03/in03 b/03/in03 index 5a797c1..3be190d 100644 --- a/03/in03 +++ b/03/in03 @@ -1,3 +1,7 @@ +return +str Hi +align +return J=d1 I=:hello_world D=:hello_world_end -- cgit v1.2.3