diff options
Diffstat (limited to 'linux/ex4.subx')
-rw-r--r-- | linux/ex4.subx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/linux/ex4.subx b/linux/ex4.subx new file mode 100644 index 00000000..72f03254 --- /dev/null +++ b/linux/ex4.subx @@ -0,0 +1,39 @@ +# Read a character from stdin, save it to a global, write it to stdout. +# +# To run: +# $ ./bootstrap translate init.linux apps/ex4.subx -o apps/ex4 +# $ ./bootstrap run apps/ex4 + +== data + +# the global variable we save to +X: + 0/imm32 # space for read() to write to + +== code + +Entry: +# read(stdin, X, 1) +# . fd = 0 (stdin) +bb/copy-to-ebx 0/imm32 +# . data = X (location to write result to) +b9/copy-to-ecx X/imm32 +# . size = 1 character +ba/copy-to-edx 1/imm32 +# . syscall +e8/call syscall_read/disp32 + +# write(stdout, X, 1) +# . fd = 1 (stdout) +bb/copy-to-ebx 1/imm32 +# . initialize X (location to read from) +b9/copy-to-ecx X/imm32 +# . size = 1 character +ba/copy-to-edx 1/imm32 +# . syscall +e8/call syscall_write/disp32 + +# exit(ebx) +e8/call syscall_exit/disp32 + +# . . vim:nowrap:textwidth=0 |