6530
New prototype: a simple 4-operator calculator. Inspired (yet again) by Crenshaw.
This commit is contained in:
parent
d292196ff5
commit
538805df51
40
apps/arith.mu
Normal file
40
apps/arith.mu
Normal file
|
@ -0,0 +1,40 @@
|
|||
fn main args: (addr array (addr array byte)) -> exit-status/ebx: int {
|
||||
# var input/esi: (addr array byte) = args[1] {{{
|
||||
var input/esi: (addr array byte) <- copy 0
|
||||
{
|
||||
var args-in-reg/eax: (addr array (addr array byte)) <- copy args
|
||||
var input-in-eax/eax: (addr addr array byte) <- index args-in-reg, 1
|
||||
input <- copy *input-in-eax
|
||||
}
|
||||
# }}}
|
||||
var result/eax: int <- parse-int input
|
||||
exit-status <- copy result # only LSB makes it out
|
||||
}
|
||||
|
||||
fn parse-int _in: (addr array byte) -> result/eax: int {
|
||||
var in/esi: (addr array byte) <- copy _in
|
||||
var len/edx: int <- length in
|
||||
var i/ecx: int <- copy 0
|
||||
var out/edi: int <- copy 0
|
||||
{
|
||||
compare i, len
|
||||
break-if->=
|
||||
# out *= 10
|
||||
{
|
||||
var ten/eax: int <- copy 0xa
|
||||
out <- multiply ten
|
||||
}
|
||||
# c = in[i]
|
||||
var c/eax: byte <- copy 0
|
||||
{
|
||||
var tmp/ebx: (addr byte) <- index in, i
|
||||
c <- copy-byte *tmp
|
||||
}
|
||||
#
|
||||
var digit/eax: int <- to-decimal-digit c
|
||||
out <- add digit
|
||||
i <- increment
|
||||
loop
|
||||
}
|
||||
result <- copy out
|
||||
}
|
Loading…
Reference in New Issue
Block a user