昨日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
キター!
|
基礎と16bit CPUを知るために。
|
32bit CPUを知るために。
|
gasの文法を知るために。