summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--02/in0116
-rw-r--r--02/in0248
-rw-r--r--instructions.txt2
3 files changed, 56 insertions, 10 deletions
diff --git a/02/in01 b/02/in01
index b4ca535..1615667 100644
--- a/02/in01
+++ b/02/in01
@@ -30,7 +30,7 @@ unused padding
;im;02;00;00;00;00;00;00;00 open
;sy
-
+-- second pass starts here --
begin by writing the elf header.
the segment we're loading in includes the ELF header at address 0x400000, so we can just read it from there
;im;04;00;00;00;00;00;00;00 out fd
@@ -54,7 +54,7 @@ the segment we're loading in includes the ELF header at address 0x400000, so we
;BA
;im;02;00;00;00;00;00;00;00
-;cm;jn;cd;cd;cd;cd end of file
+;cm;jn;61;07;00;00 end of file
look at first byte of command
;im;88;00;40;00;00;00;00;00
@@ -213,7 +213,7 @@ now write
;im;01;00;00;00;00;00;00;00 write
;sy
-;jm;cd;cd;cd;cd skip to newline
+;jm;c3;03;00;00 skip to newline
unused padding
;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00
@@ -262,7 +262,7 @@ rax has the address to write.
we can just store it in rbp:
;RA
then jump to the place where we wrote immediates.
-;jm;cd;cd;cd;cd
+;jm;d5;fe;ff;ff
unused padding
;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00
@@ -413,7 +413,7 @@ this is a real command
;zA;lb
;BA
;im;0a;00;00;00;00;00;00;00 '\n'
-;cm;jn;cd;cd;cd;cd not a newline--keep looping
+;cm;jn;ae;ff;ff;ff not a newline--keep looping
;jm;be;f8;ff;ff go back to read next command
unused padding
@@ -424,7 +424,7 @@ unused padding
;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00
;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00;00
--- end of file --
+-- end of file (0x400916) --
lseek input fd back to start of file
;im;03;00;00;00;00;00;00;00
@@ -453,7 +453,7 @@ check if we're on the second pass
;BD
;zA
-;cm;je;cd;cd;cd;cd not the second pass, jump back to do it
+;cm;je;bb;f7;ff;ff not the second pass, jump back to do it
okay we're done the second pass. let's exit nicely
;zA;JA exit code 0
@@ -6550,7 +6550,7 @@ the formatting changed appropriately.
;00;00;00;00;00;00;00;00
;00;00;00;00;00;00;00;00
;00;00;00;00;00;00;00;00
-;00;00;00;00;00;00;00;00
+;01;90;00;00;00;00;00;00
;00;00;00;00;00;00;00;00
;00;00;00;00;00;00;00;00
;00;00;00;00;00;00;00;00
diff --git a/02/in02 b/02/in02
index a304839..8355546 100644
--- a/02/in02
+++ b/02/in02
@@ -1,3 +1,47 @@
-::hw
jm
-:-hw
+:-co jump to code
+::hw
+'H
+'e
+'l
+'l
+'o
+',
+'
+'w
+'o
+'r
+'l
+'d
+'!
+\n
+::he end of hello world
+::co start of code
+//
+// now we'll calculate the length of the hello world string
+// by subtracting hw from he.
+//
+im
+--he
+BA
+im
+--hw
+nA
++B
+DA put length in rdx
+// okay now we can write it
+im
+##1.
+JA set rdi to 1 (stdout)
+im
+--hw
+IA set rsi to a pointer to "Hello, world!\n"
+im
+##1. write
+sy
+im
+##0. exit code 0
+JA
+im
+##3c. exit = syscall 0x3c
+sy
diff --git a/instructions.txt b/instructions.txt
index cc997b6..8553c1d 100644
--- a/instructions.txt
+++ b/instructions.txt
@@ -99,3 +99,5 @@ ret
>c3
syscall
>0f 05
+nop
+>90