|
|
|
@ -73,33 +73,26 @@ bf_instructions: |
|
|
|
jmp rbx |
|
|
|
jmp rbx |
|
|
|
align 8 |
|
|
|
align 8 |
|
|
|
times 8*('['-'>'-1) hlt |
|
|
|
times 8*('['-'>'-1) hlt |
|
|
|
bf_forward_stub: ; '[' ascii 91 |
|
|
|
|
|
|
|
jmp bf_forward |
|
|
|
|
|
|
|
align 8 |
|
|
|
|
|
|
|
times 8*(']'-'['-1) hlt |
|
|
|
|
|
|
|
bf_backward_stub: ; ']' ascii 93 |
|
|
|
|
|
|
|
jmp bf_backward |
|
|
|
|
|
|
|
align 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bf_forward: |
|
|
|
bf_forward: ; '[' ascii 91 |
|
|
|
|
|
|
|
; jest 16 bajtów miejsca |
|
|
|
cmp byte [rdi], 0 |
|
|
|
cmp byte [rdi], 0 |
|
|
|
je bf_jump |
|
|
|
jne .dont_jump |
|
|
|
bf_forward_end: |
|
|
|
mov rsi, [8*rsi + r14] |
|
|
|
|
|
|
|
.dont_jump: |
|
|
|
inc rsi |
|
|
|
inc rsi |
|
|
|
jmp rbx |
|
|
|
jmp rbx |
|
|
|
|
|
|
|
align 8 |
|
|
|
|
|
|
|
|
|
|
|
bf_backward: |
|
|
|
bf_backward: ; ']' ascii 93 |
|
|
|
|
|
|
|
; więcej niż 8 bajtów, ale jest miejsce |
|
|
|
cmp byte [rdi], 0 |
|
|
|
cmp byte [rdi], 0 |
|
|
|
jne bf_jump |
|
|
|
je .dont_jump |
|
|
|
bf_backward_end: |
|
|
|
mov rsi, [8*rsi + r14] |
|
|
|
|
|
|
|
.dont_jump: |
|
|
|
inc rsi |
|
|
|
inc rsi |
|
|
|
jmp rbx |
|
|
|
jmp rbx |
|
|
|
|
|
|
|
|
|
|
|
bf_jump: |
|
|
|
|
|
|
|
sub rsi, bf_program |
|
|
|
|
|
|
|
mov rsi, [8*rsi + bf_jumps] |
|
|
|
|
|
|
|
inc rsi |
|
|
|
|
|
|
|
jmp rbx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bf_out: |
|
|
|
bf_out: |
|
|
|
push rdi |
|
|
|
push rdi |
|
|
|
@ -156,7 +149,13 @@ _jump_loop: |
|
|
|
|
|
|
|
|
|
|
|
lea rsi, [bf_program] |
|
|
|
lea rsi, [bf_program] |
|
|
|
lea rdi, [bf_tape] |
|
|
|
lea rdi, [bf_tape] |
|
|
|
lea rbx, [_program_loop] |
|
|
|
lea rbx, [_program_loop] ; stała |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lea r13, [bf_program] |
|
|
|
|
|
|
|
shl r13, 3 |
|
|
|
|
|
|
|
lea r14, [bf_jumps] |
|
|
|
|
|
|
|
sub r14, r13 ; stała do zamiany adresu programu na adres w bf_jumps |
|
|
|
|
|
|
|
|
|
|
|
_program_loop: |
|
|
|
_program_loop: |
|
|
|
movzx rax, byte [rsi] |
|
|
|
movzx rax, byte [rsi] |
|
|
|
lea rax, [bf_instructions + 8*rax] |
|
|
|
lea rax, [bf_instructions + 8*rax] |
|
|
|
|