Compare commits

...

2 Commits

Author SHA1 Message Date
andromeda
ad6a79d937 throw error with non-register operands 2026-03-18 20:52:00 +01:00
andromeda
ac0a10fafd finally change .gitignore, correctly handle register operands 2026-03-18 20:45:12 +01:00
3 changed files with 35 additions and 1 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
result*
.bootle*

Binary file not shown.

View File

@@ -635,6 +635,10 @@ tokenise:
test byte [.expecting], E_OPERAND ; make sure an operand was expected
jz .unexpected_operand ; if not, error
push rax
push rdi
xor eax, eax ; rax = length of operand
.operand_loop:
mov dl, [rdi]
@@ -645,10 +649,39 @@ tokenise:
cmp dl, 0x00
je .operand_break
inc rdi
inc rax ; inc length counter
inc rdi ; inc byte pointer
jmp .operand_loop
.operand_break:
pop rdi ; rdi = first byte of operand
push rdi
push rsi
mov rsi, rax ; rsi = length of operand in bytes
mov cx, ax ; cx = length counter for safe keeping
call evaluate_operand
; dl = return code
; ax = register's token ID
pop rsi
pop rdi ; rdi = first byte of operand
add di, cx ; rdi = last byte of operand
mov rcx, rax ; rcx = evaluate_operand's return value
pop rax ; rax = number of tokens processed
; operand is a register
; cx = token ID
cmp dl, 0x00
je .operand_register
jmp .unexpected_operand
.operand_register:
mov [TOKEN_TABLE_ADDR + rax * TOKEN_TABLE_ENTRY_SIZE], cx
inc rax ; another token processed
jmp .operand_break_continue
.operand_break_continue:
mov byte [.expecting], E_COMMENT | E_NEWLINE | E_WHITESPACE | E_COMMA
jmp .loop