2008/05/28

[アセンブラ] アセンブラで 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 件のコメント: