diff --git a/brainfuck.asm b/brainfuck.asm index 5b0c371..46ff96f 100644 --- a/brainfuck.asm +++ b/brainfuck.asm @@ -32,7 +32,7 @@ section .text: ; Podczas interpretacji programu znaczenia rejestrów są następujące: ; - rdi jest wskaźnikiem programu -; - rbx jest wskaźnikiem na aktualne pole na taśmie +; - rsi jest wskaźnikiem na aktualne pole na taśmie ; Tablica 8-bajtowych kawałków kodu, w której na miejscu 8*i znajduje się kod zakończony ; instrukcją powrotu, który należy wykonać dla znaku o kodzie ascii równym i. Operacje, @@ -46,7 +46,7 @@ bf_instructions: times 8*('+'-1) ret bf_increment: ; '+' ascii 43 inc byte [rdi] - inc rbx + inc rsi ret align 8 bf_in_stub: ; ',' ascii 44 @@ -54,7 +54,7 @@ bf_instructions: align 8 bf_decr: ; '-' ascii 45 dec byte [rdi] - inc rbx + inc rsi ret align 8 bf_out_stub: ; '.' ascii 46 @@ -64,13 +64,13 @@ bf_instructions: times 8*('<'-'.'-1) ret bf_left: ; '<' ascii 60 dec rdi - inc rbx + inc rsi ret align 8 times 8*('>'-'<'-1) ret bf_right: ; '>' ascii 62 inc rdi - inc rbx + inc rsi ret align 8 times 8*('['-'>'-1) ret @@ -87,7 +87,7 @@ bf_instructions: jne bf_forward_end jmp bf_jump bf_forward_end: - inc rbx + inc rsi ret bf_backward: @@ -95,13 +95,13 @@ bf_instructions: je bf_backward_end jmp bf_jump bf_backward_end: - inc rbx + inc rsi ret bf_jump: - sub rbx, bf_program - mov rbx, [8*rbx + bf_jumps] - inc rbx + sub rsi, bf_program + mov rsi, [8*rsi + bf_jumps] + inc rsi ret bf_out: @@ -113,7 +113,7 @@ bf_instructions: call fflush pop rsi pop rdi - inc rbx + inc rsi ret bf_in: @@ -123,7 +123,7 @@ bf_instructions: pop rsi pop rdi mov byte [rdi], al - inc rbx + inc rsi ret @@ -135,32 +135,32 @@ call gets ; Buduję tablicę skoków dla ']'. Jeśli i-ty znak programu to nawias, to na 8*i-tym miejscu w tablicy ; skoków znajdzie się adres odpowiadającego mu nawiasu. -lea rbx, [bf_program] +lea rsi, [bf_program] lea r12, [bf_jumps] _jump_loop: - cmp byte [rbx], '[' + cmp byte [rsi], '[' jne .else push r12 - push rbx + push rsi jmp .end .else: - cmp byte [rbx], ']' + cmp byte [rsi], ']' jne .end pop rax mov qword [r12], rax pop rax - mov qword [rax], rbx + mov qword [rax], rsi .end: - inc rbx + inc rsi add r12, 8 - cmp byte [rbx], 0 + cmp byte [rsi], 0 jnz _jump_loop -lea rbx, [bf_program] +lea rsi, [bf_program] lea rdi, [bf_tape] _program_loop: - movzx rax, byte [rbx] + movzx rax, byte [rsi] lea rax, [bf_instructions + 8*rax] call rax jmp _program_loop