From 0160d2e127f506bb36625861e2dd91e009583e24 Mon Sep 17 00:00:00 2001 From: andromeda Date: Sun, 15 Mar 2026 22:02:36 +0100 Subject: add binary --- twasm/asm/main.asm | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'twasm/asm/main.asm') diff --git a/twasm/asm/main.asm b/twasm/asm/main.asm index 069e3f3..c792eb9 100644 --- a/twasm/asm/main.asm +++ b/twasm/asm/main.asm @@ -730,7 +730,8 @@ tokenise: ; | type | p. | description | ; |------|----|--------------| ; | 0x00 | 0x | hexidecimal | -; | 0x01 | 0b | octal | +; | 0x01 | 0q | octal | +; | 0x02 | 0b | binary | ; | 0xFF | | unrecognised | ; ; where `p.` is the prefix @@ -774,6 +775,13 @@ evaluate_constant: je .oct_loop pop rcx + ; binary case + mov rcx, 0x02 + push rcx + cmp dl, 'b' + je .bin_loop + pop rcx + jmp .unrecognised .hex_loop: @@ -822,6 +830,25 @@ evaluate_constant: inc rdi ; point to next byte jmp .oct_loop ; and loop + .bin_loop: + cmp rsi, 0 ; range check + je .break + + shl rax, 1 + + mov dl, [rdi] + + sub dl, '0' + cmp dl, 1 + jg .unrecognised + + and dl, 1 ; mask + or al, dl ; and newest bit + + dec rsi + inc rdi + jmp .bin_loop + .break: pop rdx ret -- cgit v1.3.1