summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--03/ex038
-rw-r--r--03/in02142
-rw-r--r--03/in034
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 <number>"
+::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 <number>"
::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