Compare commits
2 Commits
2e222c304a
...
ad6a79d937
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad6a79d937 | ||
|
|
ac0a10fafd |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
result*
|
||||
.bootle*
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user