#指令 #汇编 #字节码 #符号 #架构 #编译器 #执行

bin+lib ttk91

TTK91指令架构的解析器、编译器和模拟库

2 个不稳定版本

0.2.0 2020年5月25日
0.1.0-alpha.12020年1月2日

#895 in 编程语言

MIT 许可证

200KB
4.5K SLoC

概述

ttk91 包提供处理 TTK91 字节码和符号汇编文件的库,将汇编编译成字节码并执行字节码。该包还包括用于执行这些任务的命令行工具。通过 ttk91-wasm 包提供(有限)WebAssembly 接口,ttk91-web 使用此包。

特性

  • 解析符号和字节码格式的 TTK91 程序
  • 将符号汇编编译成字节码
  • 为字节码生成源映射
  • 执行字节码
  • 可扩展的 IO 和内存接口
  • 命令行工具

示例

use ttk91::{
    symbolic::Program,
    emulator::{Emulator, StdIo, Memory},
};

fn main() {
    // Simple TTK91 program that adds 13 and 15 together and outputs the answer.
    let symbolic_source = r#"
        ;; DATA
        X       DC      13
        Y       DC      15

        ;; CODE
        MAIN 	LOAD 	R1, X
                ADD 	R1, Y
                OUT 	R1, =CRT
                SVC 	SP, =HALT
    "#;

    // Parse the symbolic assembly into symbolic IR.
    let symbolic = Program::parse(symbolic_source).unwrap();

    // Translate the symbolic IR into bytecode IR.
    let compiled = symbolic.compile();

    // Convert the bytecode IR to bytecode.
    let memory = compiled.to_words();

    // Load the bytecode into an emulator which uses the standard output.
    let mut emulator = Emulator::new(memory, StdIo);

    // Execute the bytecode.
    emulator.run()
        .expect("an error occured while emulating the program");
}

命令行工具

此包包含多个命令行工具。这些工具可以通过 tools 功能启用,也可以通过 ttk91replttk91run 功能分别启用。

ttk91repl

ttk91repl 提供了一个用于 TTK91 符号汇编语言的读取-执行-打印-循环环境。它支持交替编写和执行代码,并提供适用于调试的多个命令。

0x8000> LOAD  R1, =5
0x8001> OUT   R1, =CRT
5
0x0002> .register r1
Register R1 = 5
0x8002> SUB   R1, =1
0x8003> JNZER R1, 0x8001
4
3
2
1
0x8004>

ttk91run

ttk91run 命令行工具能够模拟符号和字节码格式的 TTK91 程序。

$ ttk91run tests/hello.k91
28
$ ttk91run tests/hello.b91
28

依赖关系

~3–11MB
~76K SLoC