diff --git a/apps/zasm/expr.asm b/apps/zasm/expr.asm index dbd82a9..41c8049 100644 --- a/apps/zasm/expr.asm +++ b/apps/zasm/expr.asm @@ -2,6 +2,11 @@ ; We expect (HL) to be disposable: we mutate it to avoid having to make a copy. ; Sets Z on success, unset on error. parseExpr: + ; Before we evaluate an expression, we first try for a regular number or + ; symbol. We do this because parsing expressions can mess up some values + ; with its splitting logic. For example '-' is going to end up '\0'. + call parseNumberOrSymbol + ret z push de push hl call _parseExpr @@ -19,7 +24,7 @@ _parseExpr: ld a, '*' call _findAndSplit jp z, _applyMult - jp parseNumberOrSymbol + ret ; failure ; Given a string in (HL) and a separator char in A, return a splitted string, ; that is, the same (HL) string but with the found A char replaced by a null diff --git a/tools/tests/zasm/test1.asm b/tools/tests/zasm/test1.asm index 89f7b40..0aa25b2 100644 --- a/tools/tests/zasm/test1.asm +++ b/tools/tests/zasm/test1.asm @@ -24,3 +24,4 @@ label2: .dw 0x42 rl d rr e rlc c + cp '-'