| 4.ふかちんXアセンブラ、ふかちんXマシン語仕様 |
|
|
|
|
|
|
|
|
|
|
|
|
ふかちんXマシン語は、一語、32bitもしくは64bitです。 |
|
|
|
1)命令形式 |
|
|
命令のフィールド |
|
|
OP1 |
OP2 |
r/r1 |
x/r2 |
adrフィールド |
|
|
|
|
|
8bit |
8bit |
8bit |
8bit |
32bit |
|
|
|
|
|
|
|
2)命令一覧 |
|
|
OP1 |
OP2 |
r/r1/sp |
x/r2/b/sp |
adr |
命令語長 |
アセンブラ |
|
|
|
00 |
00 |
- |
- |
- |
32 |
nop |
|
|
|
|
01 |
- |
- |
- |
32 |
halt |
|
|
|
01 |
00 |
|
|
|
64 |
ld |
r,adr,x |
32bitロード |
|
|
|
01 |
|
|
|
64 |
ldb |
r,adr,x |
8bitロード |
|
|
|
02 |
|
|
|
64 |
ldw |
r,adr,x |
16bitロード |
|
|
|
03 |
|
|
|
64 |
ldt |
r,adr,x |
24bitロード |
|
|
|
04 |
|
|
|
64 |
st |
r,adr,x |
32bitストア |
|
|
|
05 |
|
|
|
64 |
stb |
r,adr,x |
8bitストア |
|
|
|
06 |
|
|
|
64 |
stw |
r,adr,x |
16bitストア |
|
|
|
07 |
|
|
|
64 |
stt |
r,adr,x |
24bitストア |
|
|
|
08 |
|
|
|
64 |
lad |
r,adr,x |
|
|
|
09 |
|
|
- |
32 |
ld |
r1,r2 |
|
|
|
0A |
- |
|
- |
32 |
ldsp |
sp,r2 |
spにr2の内容をセット |
|
|
|
0B |
|
- |
- |
32 |
ldsp |
r1,sp |
r1にspの内容をセット |
|
|
|
0C |
- |
|
- |
32 |
ldsp |
spl,r2 |
splにr2の内容をセット |
|
|
|
0D |
|
- |
- |
32 |
ldsp |
r1,spl |
r1にsplの内容をセット |
|
|
|
0E |
- |
|
- |
32 |
ldsv |
svt,r2 |
svc用の割りこみテーブルの先頭アドレスを、r2によって設定する。 |
|
|
0F |
|
- |
- |
32 |
ldsv |
r1,svt |
svc用の割りこみテーブルの先頭アドレスを、r1に取得する。 |
|
02 |
00 |
|
|
|
64 |
adda |
r,adr,x |
|
|
|
01 |
|
|
|
64 |
suba |
r,adr,x |
|
|
|
02 |
|
|
|
64 |
mula |
r,adr,x |
|
|
|
03 |
|
|
|
64 |
diva |
r,adr,x |
余りはgr0に格納される。 |
|
|
|
04 |
|
|
|
64 |
addl |
r,adr,x |
|
|
|
05 |
|
|
|
64 |
subl |
r,adr,x |
|
|
|
06 |
|
|
|
64 |
mull |
r,adr,x |
|
|
|
07 |
|
|
|
64 |
divl |
r,adr,x |
余りはgr0に格納される。 |
|
|
|
08 |
|
|
- |
32 |
adda |
r1,r2 |
|
|
|
09 |
|
|
- |
32 |
suba |
r1,r2 |
|
|
|
0A |
|
|
- |
32 |
mula |
r1,r2 |
|
|
|
0B |
|
|
- |
32 |
diva |
r1,r2 |
余りはgr0に格納される。 |
|
|
|
0C |
|
|
- |
32 |
addl |
r1,r2 |
|
|
|
0D |
|
|
- |
32 |
subl |
r1,r2 |
|
|
|
0E |
|
|
- |
32 |
mull |
r1,r2 |
|
|
|
0F |
|
|
- |
32 |
divl |
r1,r2 |
余りはgr0に格納される。 |
|
|
03 |
00 |
|
|
|
64 |
and |
r,adr,x |
|
|
|
01 |
|
|
|
64 |
or |
r,adr,x |
|
|
|
02 |
|
|
|
64 |
xor |
r,adr,x |
|
|
|
03 |
|
- |
- |
32 |
not |
r |
|
|
|
04 |
|
|
- |
32 |
and |
r1,r2 |
|
|
|
05 |
|
|
- |
32 |
or |
r1,r2 |
|
|
|
06 |
|
|
- |
32 |
xor |
r1,r2 |
|
|
04 |
00 |
|
|
|
64 |
cpa |
r,adr,x |
|
|
|
01 |
|
|
|
64 |
cpl |
r,adr,x |
|
|
|
02 |
|
|
- |
32 |
cpa |
r1,r2 |
|
|
|
03 |
|
|
- |
32 |
cpl |
r1,r2 |
|
|
05 |
00 |
|
|
|
64 |
sla |
r,adr,x |
|
|
|
01 |
|
|
|
64 |
sra |
r,adr,x |
|
|
|
02 |
|
|
|
64 |
sll |
r,adr,x |
|
|
|
03 |
|
|
|
64 |
srl |
r,adr,x |
|
|
06 |
00 |
- |
|
|
64 |
jmi |
adr,x |
|
|
|
01 |
- |
|
|
64 |
jnz |
adr,x |
|
|
|
02 |
- |
|
|
64 |
jze |
adr,x |
|
|
|
03 |
- |
|
|
64 |
jump |
adr,x |
|
|
|
04 |
- |
|
|
64 |
jpl |
adr,x |
|
|
|
05 |
- |
|
|
64 |
jov |
adr,x |
|
|
07 |
00 |
|
- |
- |
64 |
push |
r |
CASLのPUSHとは異なる動作をする。 |
|
|
|
01 |
|
- |
- |
32 |
pop |
r |
|
|
08 |
00 |
- |
|
|
64 |
call |
adr,x |
|
|
|
01 |
- |
- |
- |
32 |
ret |
|
|
|
09 |
00 |
|
|
|
64 |
in |
r,adr,x |
CASLのINとは異なる動作をする。 |
|
|
|
01 |
|
|
|
64 |
out |
r,adr,x |
CASLのOUTとは異なる動作をする。 |
|
|
0A |
00 |
|
|
- |
32 |
bitt |
r,b |
bの個所のビットをテストする。結果はzfに格納される。 |
|
|
|
01 |
|
|
- |
32 |
bits |
r,b |
bの個所のビットをセット。(1にする) |
|
|
|
02 |
|
|
- |
32 |
bitr |
r,b |
bの個所のビットをリセット(0にする。) |
|
|
0B |
00 |
|
- |
- |
32 |
inc |
r |
rのレジスタをインクリメントする。 |
|
|
|
01 |
|
- |
- |
32 |
dec |
r |
rのレジスタをデクリメントする。 |
|
|
0C |
00 |
|
|
- |
32 |
blld |
r1,r2 |
r2からr1へ、gr0分メモリをブロック転送する。 |
|
|
0D |
00 |
- |
|
|
32 |
ei |
adr,x |
|
|
|
01 |
- |
|
|
32 |
di |
adr,x |
|
|
0F |
00 |
- |
|
|
64 |
svc |
adr,x |
|
|
|
3)補足 |
|
|
|
基本的にCASLと似ています。 |
|
|
異なる点としましては、命令長が拡張されたのと、あと幾つかの命令が追加されています。 |
|
|
特にinとoutは、CASLのINとOUTとは全く異なり、I/Oポート上へレジスタの内容を入出力する動作をします。 |
|
|
|
4)アセンブラ擬似命令 |
|
|
|
ラベル |
命令コード |
オペランド |
|
|
|
ラベル |
start |
[実行開始位置] |
|
|
|
end |
|
|
|
|
[ラベル] |
ds |
語数 |
|
|
|
[ラベル] |
dc |
定数[,定数]・・・ |
|
|
ラベル |
equ |
数値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|