no f/b stubs

opt
Szymon Karpiński 6 years ago
parent 15f4c64ce5
commit 5e2f94a5f7
  1. 37
      brainfuck.asm

@ -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]

Loading…
Cancel
Save