昨日8086と486の本を読んで(とても面白かったので一気に読んでしまいました)x86_64の一般命令とレジスタをちょろっと見たのでjonesforthが何となく読めるようになりました。(コメント内にgasのシンタックスの説明すらちょっと書いてあってとても親切)

(OSやドライバを書くのが目的ではないでシステム系の難しい機能は飛ばしました。)

そこでまずforthが分からないとしょうがないのでgforth(gnuのforth実装)を入れてみることに。

$ sudo port install gforth
(...)
/usr/bin/gcc-4.2 -I./../arch/386 -I. -Wall -O2 -arch x86_64 -fomit-frame-pointer -fforce-addr -no-cpp-precomp -DHAVE_CONFIG_H -DDEFAULTPATH='".:/opt/local
/lib/gforth/site-forth:/opt/local/share/gforth/site-forth:/opt/local/lib/gforth/0.7.0:/opt/local/share/gforth/0.7.0"' -I/opt/local/include -fno-gcse -fno-s
trict-aliasing -fno-crossjumping -fno-reorder-blocks -falign-labels=1 -falign-loops=1 -falign-jumps=1 -fno-defer-pop -fcaller-saves -fno-inline -DGFORTH_DEB
UGGING -DENGINE=2 -o engine2-noll.o -c ./engine.c
/var/tmp//cc6XyjEK.s:1482:Incorrect register `%r13' used with `l' suffix
/var/tmp//cc6XyjEK.s:1525:Incorrect register `%rbx' used with `l' suffix
/var/tmp//cc6XyjEK.s:1587:Incorrect register `%rbx' used with `l' suffix

が、エラー。rbxレジスタが使えないというのは何となく64bit対応部分がおかしいのかなと予想。

building gforth on Mac OS X Snow Leopard (10.6.x) - comp.lang.forth | Google グループ

The error does not occur in 64-bit mode, with an updated version
of Anton's configure line:

./configure x86_64-apple-darwin10.2.0

Targetをちゃんと指定しないと駄目みたいです。

$ ./configure CC="gcc -m32"

でも行けるっぽいですが、せっかくのCPUなので前者で入るようにportfileに下記を追加。

$ sudo port edit gforth
(...)
configure.args x86_64-apple-darwin10.2.0
(...)

今度はちゃんと入りました。

% gforth
Gforth 0.7.0, Copyright (C) 1995-2008 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 2 + . 3 ok
bye

キター!

参照:MacPorts Guide

はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)

基礎と16bit CPUを知るために。

はじめて読む486―32ビットコンピュータをやさしく語る

32bit CPUを知るために。

x86アセンブラ入門―PC/ATなどで使われている80x86のアセンブラを習得 (TECHI―Processor)

gasの文法を知るために。

Comments


Option