2003f 勝手にバイナリ案
8ビットを基本とした可変長セット
回路設計が簡単になるように考慮
'i'c順を基にする
命令の構成
00oooooo 命令 o:OPCODE
rrrmmmmm 1つめのオペランド。MODEがimmの場合REGは無視される。r:REG m:MODE
(imm/disp)
rrrmmmmm 2つめのオペランド
(imm/disp)
(rrrmmmmm 3つめのオペランド)
(imm/disp)
OPCODE
0xxxxx: オペランド2つの命令
000000: ata +
000001: nta -
000010: ada &
000011: ekc |
000100: dto >>>
000101: dro <<
000110: dtosna >>
000111: dal ~^
001000: krz =
001001: malkrz
01cccc: fi
10xxxx: オペランド3つの命令
100000: inj
101000: lat
101001: latsna
COND
0000 llonys >
0001 xtlonys <=
0010 xolonys >=
0011 xylonys <
0110 clo ==
0111 niv !=
1000 llo >
1001 xtlo <=
1010 xolo >=
1011 xylo <
比較は 右の値 + (-左の値) で行う。順番が逆なのはntaに合わせるため
上記ビットをscznに割り当てる
Z: 加算の結果が0かどうか
C: 加算で最上位ビットで繰り上がりが起きて捨てられたか
判定は、((z AND Z) OR NOT(c OR C)) XOR n で決定する
sが1の場合は比較処理の前に両方の値の最上位ビットを反転さそる
REG
000: f0
001: f1
010: f2
011: f3
101: f5
111: xx
MODE
00000: reg
00100: imm8
00101: imm16
00110: imm32
10000: reg@
10100: reg+disp8@
10101: reg+disp16@
10110: reg+disp32@
11rrr: reg+reg@ r:2つめのreg
immかdispを含むとき、その値を表す8/16/32ビットの値が後続する。
imm8/16は符号無し、disp8/16符号あり(C0ならFFFFFFC0として扱う)
例
'c'i
nll fib1
krz f0 f5+ 4@
krz f1 0
krz f2 1
fi f0 0 clo l' is malkrz xx ka
nta f0 1
krz f3 f1
ata f3 f2
inj f1 f2 f3
krz xx is
krz f0 f1 l' ka
krz xx f5@
1482E8D4: 08 B4 04 00
1482E8D8: 08 04 00 20
1482E8DC: 08 04 01 40
1482E8E0: 16 00 04 00
1482E8E4: 09 06 14 82 E8 FC E0
1482E8EB: 01 04 01 00
1482E8EF: 08 20 60
1482E8F2: 00 40 60
1482E8F5: 20 60 40 20
1482E8F5: 08 06 14 82 E8 E0 E0
1482E8FC: 08 20 00
1482E8FF: 08 B0 E0