# disco-disassembler

> Disassembles snippets of machine code for the STM32L476 Discovery Kit

Latest version **0.0.1** (published 2019-03-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install disco-disassembler
pnpm add disco-disassembler
yarn add disco-disassembler
bun add disco-disassembler
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.1 |
| Published | 2019-03-17 |
| First published | 2019-03-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 287.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Benjamin Gray |
| Maintainers | aerijo |

## Links

- npm: https://www.npmjs.com/package/disco-disassembler
- Repository: https://github.com/Aerijo/disco-disassembler
- Homepage: https://github.com/Aerijo/disco-disassembler#readme
- npm.io page: https://npm.io/package/disco-disassembler

## Recent versions

- 0.0.1 (latest) — 2019-03-17
- 0.0.0 — 2019-03-17

## README

This project is for the STM32L476 discovery board (discoboard). It aims to be a tool to interpret machine code, as well as a general glossary of commands that can be searched and filtered in numerous ways, e.g. by byte matches or keywords.

The instruction interpreter likely has a few errors in it. Hopefully these will be found and removed with use.


### Generalised Instruction Decoding

One goal of this module is to support arbitrary encodings (that at least somewhat resemble ARM encodings). Given an input instruction, the steps to decode are

1. Get the encoding tree corresponding to the instruction width
2. Descend the (binary) tree by checking the marked bit
3. When a terminal node is reached, there will be an array of possible encodings (some encodings are more specific versions of general ones). Check each in order, and return if there is a match. If no match, return undefined.

Note that the final step iterates the array in order. At least for the ARM instructions I am using, arranging the encodings by most to least specific is sufficient to accurately determine which instruction it is.

However, some instructions conflict in complicated ways. E.g.,
```
ADD_REG_T2: 01000100 [DN:1] [Rm:4] [Rdn:3]
ADD_SPR_T1: 01000100 [DM:1] 1101   [Rdm:3]
ADD_SPR_T2: 01000100 1      [Rm:4] 101
```
For `ADD_SPR_T2`, though it looks more specific with only one variable, a value of `1101` makes it `T1` instead. The `T1` encoding itself is unconditional; matching the set bits guarantees a complete match (if neither match then `ADD_REG_T2` is used). This feature will be on hold until all conflicts can be resolved with a natural way to specify how.

---
_Source: https://npm.io/package/disco-disassembler · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
