diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-07-16 08:09:42 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-07-16 08:28:56 -0700 |
commit | 44d26b77c45668c9b0c99894a4294cec004361fe (patch) | |
tree | 68a5dcd4971873efd4ce184e9bf9a531c2161813 /linux/apps/ex4.subx | |
parent | ac45f097153afd3a89f43886e4124c5b2c26b98a (diff) | |
download | mu-44d26b77c45668c9b0c99894a4294cec004361fe.tar.gz |
.
Diffstat (limited to 'linux/apps/ex4.subx')
-rw-r--r-- | linux/apps/ex4.subx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/linux/apps/ex4.subx b/linux/apps/ex4.subx new file mode 100644 index 00000000..3bf62551 --- /dev/null +++ b/linux/apps/ex4.subx @@ -0,0 +1,39 @@ +# Read a character from stdin, save it to a global, write it to stdout. +# +# To run: +# $ bootstrap/bootstrap translate apps/ex4.subx -o ex4 +# $ bootstrap/bootstrap run 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 |