add some tokens, length1 token support
This commit is contained in:
@@ -47,6 +47,9 @@ start:
|
||||
; ------------------------------------------------------------------------------
|
||||
|
||||
identify_token:
|
||||
cmp rsi, 1 ; if the token has length 1
|
||||
je .start_length1 ; then enter the length 1 loop
|
||||
|
||||
cmp rsi, 2 ; if the token has length 2
|
||||
je .start_length2 ; then enter the length 2 loop
|
||||
|
||||
@@ -58,6 +61,26 @@ identify_token:
|
||||
|
||||
jmp .unrecognised ; else unrecognised
|
||||
|
||||
.start_length1
|
||||
mov rcx, tokens.length1 ; rcx -> list of known tokens
|
||||
|
||||
.loop_length1
|
||||
cmp rcx, tokens.length2 ; check if rcx still in the bounds of length1 tokens
|
||||
jge .unrecognised ; if not, unrecognised
|
||||
|
||||
mov r10b, [rcx] ; known token
|
||||
mov r11b, [rdi] ; token
|
||||
cmp r10b, r11b ; if known token matches token
|
||||
je .found_length1 ; exit loop
|
||||
|
||||
add rcx, 3 ; length of token + length of id
|
||||
jmp .loop_length1
|
||||
|
||||
.found_length1
|
||||
xor eax, eax ; make sure rest of rax is zeroed
|
||||
mov ax, [rcx + 1] ; return id of token
|
||||
ret
|
||||
|
||||
.start_length2
|
||||
mov rcx, tokens.length2 ; rcx -> list of known tokens
|
||||
|
||||
@@ -496,6 +519,22 @@ test_identify_token:
|
||||
mov rsi, .msg
|
||||
call print
|
||||
|
||||
; length1 token that exists
|
||||
mov byte [TEST_ARENA_ADDR], "*"
|
||||
mov rdi, TEST_ARENA_ADDR
|
||||
mov rsi, 1
|
||||
call identify_token
|
||||
cmp ax, 0x0064
|
||||
jne .fail
|
||||
|
||||
; length1 token that doesn't exist
|
||||
mov byte [TEST_ARENA_ADDR], " "
|
||||
mov rdi, TEST_ARENA_ADDR
|
||||
mov rsi, 1
|
||||
call identify_token
|
||||
cmp ax, 0xFFFF
|
||||
jne .fail
|
||||
|
||||
; length2 token that exists
|
||||
mov word [TEST_ARENA_ADDR], "sp"
|
||||
mov rdi, TEST_ARENA_ADDR
|
||||
@@ -575,6 +614,19 @@ test_identify_token:
|
||||
; ------------------------------------------------------------------------------
|
||||
|
||||
tokens:
|
||||
.length1
|
||||
db "["
|
||||
dw 0x0051
|
||||
db "]"
|
||||
dw 0x0052
|
||||
db "+"
|
||||
dw 0x0062
|
||||
db "-"
|
||||
dw 0x0063
|
||||
db "*"
|
||||
dw 0x0064
|
||||
db "/"
|
||||
dw 0x0065
|
||||
.length2
|
||||
db "r8"
|
||||
dw 0x0008
|
||||
@@ -624,6 +676,12 @@ tokens:
|
||||
dw 0x0048
|
||||
db "ss"
|
||||
dw 0x0049
|
||||
db "je"
|
||||
dw 0x005C
|
||||
db "jg"
|
||||
dw 0x005F
|
||||
db "jl"
|
||||
dw 0x0061
|
||||
.length3
|
||||
db "rax"
|
||||
dw 0x0000
|
||||
@@ -699,6 +757,30 @@ tokens:
|
||||
dw 0x004D
|
||||
db "cr8"
|
||||
dw 0x004E
|
||||
db "hlt"
|
||||
dw 0x004F
|
||||
db "xor"
|
||||
dw 0x0053
|
||||
db "inc"
|
||||
dw 0x0054
|
||||
db "dec"
|
||||
dw 0x0055
|
||||
db "mov"
|
||||
dw 0x0056
|
||||
db "add"
|
||||
dw 0x0057
|
||||
db "sub"
|
||||
dw 0x0058
|
||||
db "ret"
|
||||
dw 0x005A
|
||||
db "cmp"
|
||||
dw 0x005B
|
||||
db "jne"
|
||||
dw 0x005D
|
||||
db "jge"
|
||||
dw 0x005E
|
||||
db "jle"
|
||||
dw 0x0060
|
||||
.length4
|
||||
db "r10d"
|
||||
dw 0x001A
|
||||
@@ -736,6 +818,10 @@ tokens:
|
||||
dw 0x003E
|
||||
db "r15b"
|
||||
dw 0x003F
|
||||
db "int3"
|
||||
dw 0x0050
|
||||
db "call"
|
||||
dw 0x0059
|
||||
.length5
|
||||
.end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user