add addressing to evaluate_operand

This commit is contained in:
andromeda
2026-03-20 09:04:50 +01:00
parent a5fd811b3f
commit 73ea2bb2b5
2 changed files with 28 additions and 8 deletions

View File

@@ -773,13 +773,27 @@ evaluate_operand:
pop rdi ; rdi -> first byte of operand
mov rsi, rax ; rsi = size of operand w/o trailing whitespace
cmp [rdi + 1], '['
cmp rsi, 0 ; case: 0 length
je .unrecognised ; unrecognised
cmp byte [rdi], '[' ; case: memory addressing
je .address
jmp .register
jmp .register ; otherwise: register
.address:
jmp halt
cmp byte [rdi + rsi - 1], ']' ; check if address is closed correctly
jne .unrecognised ; if not, fail
inc rdi ; rdi -> enclosed operand
sub rsi, 2 ; rsi = length of enclosed operand
call evaluate_operand
; rax = binary data
; dl = return code
cmp dl, 0x10 ; make sure return code isn't another memory reference
je .unrecognised ; if it is, fail
or dl, 0x10 ; flip bit for address return
ret
.register:
cmp rsi, 4
@@ -799,10 +813,6 @@ evaluate_operand:
je .register1
.register1:
and edi, 0xFF
push rsi
mov rsi, .msg
call print.debug
pop rsi
.register2:
and edi, 0xFFFF
.register3:
@@ -822,6 +832,7 @@ evaluate_operand:
.unrecognised:
mov dl, 0xFF
ret
.msg db "evaluate_operand", 0x0A, 0x00
; ------------------------------------------------------------------------------
@@ -1549,6 +1560,6 @@ program:
db "xor eax, eax", 0x0A
db "inc rax ; inline comment", 0x0A
db "; one line comment", 0x0A
db "mov [ rax ], rdx", 0x0A
db "mov [rax], rdx", 0x0A
db "hlt", 0x00 ; for the sake of being able to print it, I made it a string
.size db $ - program

View File

@@ -535,6 +535,14 @@ test_evaluate_operand:
cmp ax, 0x0003
jne .fail
mov rdi, .case3
mov rsi, 5
call evaluate_operand
cmp dl, 0x10
jne .fail
cmp ax, 0x0003
jne .fail
.pass:
mov rsi, msg_pass
call print
@@ -546,6 +554,7 @@ test_evaluate_operand:
.case0 db "rax"
.case1: ; intentionally blank
.case2 db "rdx"
.case3 db "[rdx]"
.msg db "test_evaluate_operand...", 0x00
msg_pass: