mu/archive/2.transect/ex8.k2

37 lines
849 B
Plaintext

# Example reading commandline arguments: compute length of first arg.
fn main argc : int, argv : (array (ref array char)) -> [
var tmp : (index char)
tmp <- index 1, %size(ref array char)
var tmp2 : (address (ref array char))
tmp2 <- advance argv, tmp
var s/EBX : (ref array char)
s/EBX <- copy *tmp2
var result/EAX : int
result/EAX <- ascii_length s/EBX
call exit, result/EAX
]
fn ascii_length s : (ref array char) -> result : int [
var result/EBX : int
result/EBX <- copy 0
{
var tmp0/EDI : (offset char)
tmp0/EDI <- index result/EBX, %size(char)
var tmp/EDX : (address char)
tmp/EDX <- advance *s, tmp0/EDI
var c/ECX : char
c/ECX <- copy *tmp
compare c/ECX, 0
break-if-equal
loop
}
return result/EBX
]
fn exit x : int [
code/EBX <- copy x
code/EAX <- copy 1/exit
syscall
]