no f/b stubs

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

@ -73,33 +73,26 @@ bf_instructions:
jmp rbx
align 8
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
je bf_jump
bf_forward_end:
jne .dont_jump
mov rsi, [8*rsi + r14]
.dont_jump:
inc rsi
jmp rbx
bf_backward:
align 8
bf_backward: ; ']' ascii 93
; więcej niż 8 bajtów, ale jest miejsce
cmp byte [rdi], 0
jne bf_jump
bf_backward_end:
je .dont_jump
mov rsi, [8*rsi + r14]
.dont_jump:
inc rsi
jmp rbx
bf_jump:
sub rsi, bf_program
mov rsi, [8*rsi + bf_jumps]
inc rsi
jmp rbx
bf_out:
push rdi
@ -156,7 +149,13 @@ _jump_loop:
lea rsi, [bf_program]
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:
movzx rax, byte [rsi]
lea rax, [bf_instructions + 8*rax]

Loading…
Cancel
Save