32 lines
706 B
Markdown
32 lines
706 B
Markdown
|
# The Engine Assembler
|
||
|
|
||
|
Provides an assembler-as-macro that lets you assemble The Engine bytecode
|
||
|
in your program. For example, to create an infinite loop, run:
|
||
|
|
||
|
```rust
|
||
|
let mcode = engine25519_as::assemble_engine25519!(
|
||
|
start:
|
||
|
brz start, #0
|
||
|
);
|
||
|
```
|
||
|
|
||
|
## Disassembly
|
||
|
|
||
|
You can use a basic disassembler provided by this crate. To disassemble a single opcode, run:
|
||
|
|
||
|
```rust
|
||
|
let opcode = engine25519_as::disasm::Opcode::from_i32(0x14_7985);
|
||
|
println!("Opcode: {}", opcode);
|
||
|
```
|
||
|
|
||
|
## Debugging the Macro
|
||
|
|
||
|
To debug the macro, use the `nightly` toolchain and enable the `macro-debug` feature.
|
||
|
|
||
|
An easy way to do this is:
|
||
|
|
||
|
```sh
|
||
|
$ cargo +nightly test --features macro-debug
|
||
|
...
|
||
|
```
|