-
Notifications
You must be signed in to change notification settings - Fork 24
fix: Explain the basics of instruction encoding and notation #1515
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -3,10 +3,23 @@ title: "Instructions" | |||||
| description: "Interactive reference for TVM instructions" | ||||||
| mode: "wide" | ||||||
| --- | ||||||
|
|
||||||
| The notation employed in the table below, as well as general information on the binary encoding of instructions pertaining to opcodes and immediate arguments, is explained in the [Notation](#notation) section following the table. | ||||||
|
|
||||||
| import { TvmInstructionTable } from "/snippets/tvm-instruction-table.jsx" | ||||||
|
|
||||||
| <TvmInstructionTable /> | ||||||
|
|
||||||
| ## Notation | ||||||
|
|
||||||
| TVM instructions are encoded by sequences of bits, not all the same length, but a multiple of a byte in total. The immediate arguments essentially form a part of the instruction and have no special demarcation in a bitstream. This leads to some instructions sharing the same opcode _prefix_. For instance, the `NOP` instruction has the (full) opcode of `0x00`, meaning the null byte, eight consequtive zero bits. At the same time the `XCHG_0I` family of instructions starts with `0x0`—four consequtive zero bits—and continue with a four-bit immediate argument ranging from `0x1` to `0xF`. | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [HIGH] Use of hedge word “essentially”Line 15 contains the phrase “The immediate arguments essentially form a part of the instruction,” which introduces the hedge word “essentially.” The extended style guide explicitly calls out hedges and intensifiers like this as [HIGH]-severity issues that should be replaced with concrete, factual statements. Removing “essentially” leaves a precise factual claim about how immediate arguments participate in instruction encoding. This improves clarity and aligns with the rule to avoid unnecessary softening language.
Suggested change
Please leave a reaction 👍/👎 to this suggestion to improve future reviews for everyone! |
||||||
|
|
||||||
| Thus, in the table below the `opcode` column lists instructions' prefixes (without arguments) in hexadecimal representing the corresponding sequence of bits (necessarily a multiple of four). While the `opcode` _box_ on an instruction's card shows the full [TL-B](/languages/tl-b/overview) schema for the instruction, including immediate arguments. | ||||||
|
|
||||||
| The `s[i]` notation refers to the `i`-th stack slot counting from the top, and the top being the 0th slot. Particular stack slots are refernced directly as `s0`, `s1` and so forth in TASM, FIFT and documentation, and are encoded simply by index in the binary. | ||||||
|
|
||||||
| The `[32(c+1)] PLDUZ` notation means you need to pick a value for `c`, make the calculation and substitute the result. Say, you pick the value `2`, then you write the instruction as `96 PLDUZ` in FIFT. The reason is that `96` is the actual number of bits to read, while in the bitstream only the value for `c` is stored, while the TVM performs the calculation on its own. | ||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [HIGH] Direct address to the reader with “you”Line 21 explains
Suggested change
Please leave a reaction 👍/👎 to this suggestion to improve future reviews for everyone! |
||||||
|
|
||||||
| {/* STATIC_START tvm_instructions */} | ||||||
| <div hidden> | ||||||
| #### `00` NOP | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[HIGH] Throat-clearing introductory sentence before table
Line 7 introduces the section by describing the document structure (“the table below” and “section following the table”) rather than conveying TVM semantics or notation directly. This matches the style guide’s prohibition on throat-clearing and meta-commentary that talks about the doc instead of delivering value. The sentence can be rewritten to state what the notation explains without referencing layout or navigation. This keeps the introduction focused on TVM instruction encoding semantics rather than page structure.
Please leave a reaction 👍/👎 to this suggestion to improve future reviews for everyone!