35 lines
723 B
Plaintext
Generated
35 lines
723 B
Plaintext
Generated
## read a character from stdin, save it to a global, write it to stdout
|
|
|
|
# variables are always references
|
|
# read their address with their names: x (can't write to their address)
|
|
# read/write their contents with a lookup: *x
|
|
var x : char
|
|
|
|
fn main [
|
|
call read 0/stdin, x, 1/size
|
|
result/EAX <- call write 1/stdout, x, 1/size
|
|
call exit, result/EAX
|
|
]
|
|
|
|
fn read fd : int, x : (address array byte), size : int [
|
|
EBX <- copy fd
|
|
ECX <- copy x
|
|
EDX <- copy size
|
|
EAX <- copy 3/read
|
|
syscall
|
|
]
|
|
|
|
fn write fd : int, x : (address array byte), size : int [
|
|
EBX <- copy fd
|
|
ECX <- copy x
|
|
EDX <- copy size
|
|
EAX <- copy 4/write
|
|
syscall
|
|
]
|
|
|
|
fn exit x : int [
|
|
code/EBX <- copy x
|
|
code/EAX <- copy 1/exit
|
|
syscall
|
|
]
|