hello world working! yay!
This commit is contained in:
parent
66496d98c4
commit
befd4a6435
3 changed files with 56 additions and 10 deletions
16
02/in01
16
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
|
||||
|
|
48
02/in02
48
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
|
||||
|
|
|
@ -99,3 +99,5 @@ ret
|
|||
>c3
|
||||
syscall
|
||||
>0f 05
|
||||
nop
|
||||
>90
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue