[アセンブラ] アセンブラで Brainf*ck のコア部分のみ
Brainf*ck の Hello, world! を アセンブラで実装してみた。コア部分のみ。Hello, world! のハードコーディング。
Direct threaded code になっているはず。
bits 64
section .text
%macro next 0
lodsq
jmp rax
%endmacro
;;; >
g:
inc r12
next
;;; <
l:
dec r12
next
;;; +
p:
inc byte [r12]
next
;;; -
m:
dec byte [r12]
next
;;; .
d:
mov r13, rsi
mov rax, 1
mov rdi, 1
push qword [r12]
mov rsi, rsp
mov rdx, 1
syscall
pop rax
mov rsi, r13
next
;;; ,
c:
mov r13, rsi
mov rax, 0
mov rdi, 0
push rax
mov rsi, rsp
mov rdx, 1
syscall
pop rax
mov [r12], rax
mov rsi, r13
next
;;; [
w:
mov rax, [r12]
and rax, 0x00000000000000ff
jnz .next
mov rsi, [rsi]
next
.next:
add rsi, 8
next
;;; ]
e:
mov rsi, [rsi]
next
global _start
_start:
mov r12, memory
baha:
mov rsi, .main
next
align 8
.main:
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
begin1:
dq w
dq end1
dq g
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq g
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq g
dq p
dq p
dq p
dq p
dq p
dq l
dq l
dq l
dq m
dq e
dq begin1
end1:
dq g
dq d
dq g
dq p
dq p
dq d
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq d
dq d
dq p
dq p
dq p
dq d
dq g
dq m
dq d
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq d
dq l
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq p
dq d
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq d
dq p
dq p
dq p
dq d
dq m
dq m
dq m
dq m
dq m
dq m
dq d
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq m
dq d
dq g
dq p
dq d
dq exit
exit:
mov rax, 60
xor rdi, rdi
syscall
section .bss
memory resq 1024 * 1024
0 件のコメント:
コメントを投稿