From 06f674bb6e29c75ab07520394afe452c55959596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szymon=20Karpi=C5=84ski?= Date: Sat, 18 Apr 2020 22:58:36 +0200 Subject: [PATCH] data in rdi --- brainfuck.asm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/brainfuck.asm b/brainfuck.asm index 7bb6604..5b0c371 100644 --- a/brainfuck.asm +++ b/brainfuck.asm @@ -31,7 +31,7 @@ bf_tape: resb TAPE_SIZE section .text: ; Podczas interpretacji programu znaczenia rejestrów są następujące: -; - rsi jest wskaźnikiem programu +; - rdi jest wskaźnikiem programu ; - rbx 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 @@ -45,7 +45,7 @@ bf_instructions: align 8 times 8*('+'-1) ret bf_increment: ; '+' ascii 43 - inc byte [rsi] + inc byte [rdi] inc rbx ret align 8 @@ -53,7 +53,7 @@ bf_instructions: jmp bf_in align 8 bf_decr: ; '-' ascii 45 - dec byte [rsi] + dec byte [rdi] inc rbx ret align 8 @@ -63,13 +63,13 @@ bf_instructions: align 8 times 8*('<'-'.'-1) ret bf_left: ; '<' ascii 60 - dec rsi + dec rdi inc rbx ret align 8 times 8*('>'-'<'-1) ret bf_right: ; '>' ascii 62 - inc rsi + inc rdi inc rbx ret align 8 @@ -83,7 +83,7 @@ bf_instructions: align 8 bf_forward: - cmp byte [rsi], 0 + cmp byte [rdi], 0 jne bf_forward_end jmp bf_jump bf_forward_end: @@ -91,7 +91,7 @@ bf_instructions: ret bf_backward: - cmp byte [rsi], 0 + cmp byte [rdi], 0 je bf_backward_end jmp bf_jump bf_backward_end: @@ -105,20 +105,24 @@ bf_instructions: ret bf_out: - movzx rdi, byte [rsi] + push rdi push rsi + movzx rdi, byte [rdi] call putchar xor rdi, rdi call fflush pop rsi + pop rdi inc rbx ret bf_in: + push rdi push rsi call getchar pop rsi - mov byte [rsi], al + pop rdi + mov byte [rdi], al inc rbx ret @@ -154,7 +158,7 @@ _jump_loop: lea rbx, [bf_program] -lea rsi, [bf_tape] +lea rdi, [bf_tape] _program_loop: movzx rax, byte [rbx] lea rax, [bf_instructions + 8*rax]