Coreは、コンピュータの物理的制約を体感するために設計された低級プログラミング言語です。
- ユーザーが使用できるレジスタは
r1〜r6の6つのみ。 - すべての演算はこれらレジスタ間で行う。
- 変数はすべて 8バイト(64ビット)固定。
- データの長期保管はメモリで行い、計算時のみレジスタへロードする。
- 比較演算子 (
==,<,>) は存在しない。 - 演算後のCPUフラグ(ZERO, NEGATIVE, CARRY)を直接
ifで判定する。
var @[変数名];: メモリ上に8バイトの領域を確保。
r[n] <- [値]: 即値代入r[n] <- @[変数名]: メモリからロード@[変数名] <- r[n]: メモリへストア
r[n] += [値/reg]: 加算 (フラグ更新)r[n] -= [値/reg]: 減算 (フラグ更新)r6 *= r[n]: 乗算。結果はr6に格納される。r6 /= r[n]: 除算。r6に商が、r5に余りが格納される。- ※実行前に
r5に入っていた値は破棄されるため注意。
- ※実行前に
puti r[n]: 数値として出力 (未実装)putc r[n]: ASCII文字として出力geti r[n]: 数値を読み込み (未実装)getc r[n]: 1文字読み込み (EOFでZEROフラグが立つ)
if [FLAG] ... end: 条件分岐loop ... end: 無限ループbreak: ループ脱出
r2 <- 10;
loop
r1 <- 65;
putc r1;
r1 <- 10;
putc r1;
r2 -= 1;
if ZERO
break;
end
end
| Core | x64 | 特徴 | 役割 / 注意事項 |
|---|---|---|---|
| r1 | r12 | 安全 | メイン計算用 (syscall後も値を保持) |
| r2 | r13 | 安全 | メイン計算用 (syscall後も値を保持) |
| r3 | r14 | 安全 | 引数・メモリアドレス用 |
| r4 | r15 | 安全 | 引数・メモリアドレス用 |
| r5 | rdx | 破壊 | 将来の除算「余り」用に予約 |
| r6 | rax | 破壊 | 将来の除算「商」用に予約 |