# amey-thakur/8086-assembly-language-programs architecture

> Architecture diagram of the GitHub repository amey-thakur/8086-assembly-language-programs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/amey-thakur/8086-assembly-language-programs
- Repository: https://github.com/amey-thakur/8086-assembly-language-programs

## Overview

This repository combines a browser-based 8086 assembler/emulator with a categorized assembly-program library. The user edits or selects a program, assembles it, then runs or steps it while inspecting processor state and output. The graph separates source preparation, instruction execution, machine state and services, interface, and the educational corpus. Edges are limited to README statements and source-index references or excerpts; unsampled catalogue categories are represented by their existing directories rather than inferred internals.

Main entry points: [`Source Code/8086 Microprocessor Simulator/js/ui/app.js`](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/app.js) (App controller), [`Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/cpu.js) (CPU machine), [`Source Code/8086 Microprocessor Simulator/js/exec/executor.js`](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/executor.js) (Instruction executor), [`Source Code/8086 Microprocessor Simulator/programs.js`](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/programs.js) (Program catalogue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Simulator interface"]
  node_app["App controller<br/>[app.js]"]
  node_editor["Source editor<br/>[editor.js]"]
  node_inspector["State inspector<br/>[inspector.js]"]
  node_console["Console I/O<br/>[console.js]"]
  node_shortcuts["Keyboard shortcuts<br/>[shortcuts.js]"]
  node_panels["Resizable panels<br/>[panels.js]"]
  node_library_ui["Program browser<br/>[library.js]"]
end

subgraph group_assembly["Assembly pipeline"]
  node_assembler["Two-pass assembler<br/>[assembler.js]"]
  node_lexer["Source lexer<br/>[lexer.js]"]
  node_expressions["Expression evaluator<br/>[expressions.js]"]
  node_macros["Macro expander<br/>[macros.js]"]
  node_operands["Operand parser<br/>[operands.js]"]
end

subgraph group_machine["8086 emulation"]
  node_executor["Instruction executor<br/>[executor.js]"]
  node_cpu["CPU machine<br/>[cpu.js]"]
  node_registers["Registers<br/>[registers.js]"]
  node_memory[("Segmented memory<br/>[memory.js]")]
  node_flags["Processor flags<br/>[flags.js]"]
  node_alu["Arithmetic unit<br/>[alu.js]"]
  node_shifter["Shift unit<br/>[shifter.js]"]
  node_interrupts["Interrupt services<br/>[interrupts.js]"]
  node_strings["String instructions<br/>[strings.js]"]
  node_devices["Virtual devices<br/>[devices.js]"]
end

subgraph group_library["Program collection"]
  node_catalogue["Program catalogue<br/>[programs.js]"]
  node_instruction_examples["Instruction examples"]
  node_algorithms["Algorithms and data"]
  node_system_examples["System interfaces"]
  node_graphics_examples["Graphics programs"]
end

node_learner(("Learner"))

node_learner -->|"uses"| node_app
node_app -->|"creates"| node_editor
node_app -->|"creates"| node_inspector
node_app -->|"creates"| node_console
node_app -->|"registers actions"| node_shortcuts
node_app -->|"creates"| node_panels
node_app -->|"uses"| node_library_ui
node_library_ui -->|"reads"| node_catalogue
node_app -->|"assembles source"| node_assembler
node_app -->|"owns machine"| node_cpu
node_app -->|"runs instructions"| node_executor
node_assembler -->|"expands macros"| node_macros
node_assembler -->|"tokenizes source"| node_lexer
node_assembler -->|"parses operands"| node_operands
node_macros -->|"evaluates expressions"| node_expressions
node_expressions -->|"parses literals"| node_lexer
node_operands -->|"evaluates expressions"| node_expressions
node_operands -->|"parses numbers"| node_lexer
node_executor -->|"resolves operands"| node_operands
node_executor -->|"executes against"| node_cpu
node_executor -->|"dispatches arithmetic"| node_alu
node_executor -->|"dispatches shifts"| node_shifter
node_executor -->|"dispatches interrupts"| node_interrupts
node_executor -->|"dispatches strings"| node_strings
node_cpu -->|"creates"| node_registers
node_cpu -->|"creates"| node_memory
node_cpu -->|"creates"| node_flags
node_cpu -->|"creates services"| node_devices
node_alu -->|"updates flags"| node_flags
node_shifter -->|"updates flags"| node_flags
node_interrupts -->|"uses machine state"| node_cpu
node_strings -->|"uses machine state"| node_cpu
node_inspector -->|"shows state"| node_learner
node_console -->|"shows output"| node_learner
node_catalogue -->|"indexes programs"| node_instruction_examples
node_catalogue -->|"indexes programs"| node_algorithms
node_catalogue -->|"indexes programs"| node_system_examples
node_catalogue -->|"indexes programs"| node_graphics_examples

click node_app "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/app.js"
click node_editor "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/editor.js"
click node_inspector "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/inspector.js"
click node_console "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/console.js"
click node_shortcuts "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/shortcuts.js"
click node_panels "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/panels.js"
click node_library_ui "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/library.js"
click node_catalogue "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/programs.js"
click node_assembler "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/assembler.js"
click node_lexer "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/lexer.js"
click node_expressions "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/expressions.js"
click node_macros "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/macros.js"
click node_operands "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/operands.js"
click node_executor "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/executor.js"
click node_cpu "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/cpu.js"
click node_registers "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/registers.js"
click node_memory "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/memory.js"
click node_flags "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/flags.js"
click node_alu "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/alu.js"
click node_shifter "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/shifter.js"
click node_interrupts "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/interrupts.js"
click node_strings "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/strings.js"
click node_devices "https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/devices.js"
click node_instruction_examples "https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Addressing%20Modes"
click node_algorithms "https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Sorting"
click node_system_examples "https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/DOS%20Services"
click node_graphics_examples "https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Graphics"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_editor,node_inspector,node_console,node_shortcuts,node_panels,node_library_ui toneBlue
class node_assembler,node_lexer,node_expressions,node_macros,node_operands toneAmber
class node_executor,node_cpu,node_registers,node_memory,node_flags,node_alu,node_shifter,node_interrupts,node_strings,node_devices toneMint
class node_catalogue,node_instruction_examples,node_algorithms,node_system_examples,node_graphics_examples toneRose
class node_learner toneIndigo
```

## Components

### Simulator interface

- [App controller](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/app.js): `Source Code/8086 Microprocessor Simulator/js/ui/app.js`
- [Source editor](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/editor.js): `Source Code/8086 Microprocessor Simulator/js/ui/editor.js`
- [State inspector](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/inspector.js): `Source Code/8086 Microprocessor Simulator/js/ui/inspector.js`
- [Console I/O](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/console.js): `Source Code/8086 Microprocessor Simulator/js/ui/console.js`
- [Keyboard shortcuts](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/shortcuts.js): `Source Code/8086 Microprocessor Simulator/js/ui/shortcuts.js`
- [Resizable panels](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/panels.js): `Source Code/8086 Microprocessor Simulator/js/ui/panels.js`
- [Program browser](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/ui/library.js): `Source Code/8086 Microprocessor Simulator/js/ui/library.js`

### Assembly pipeline

- [Two-pass assembler](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/assembler.js): `Source Code/8086 Microprocessor Simulator/js/asm/assembler.js`
- [Source lexer](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/lexer.js): `Source Code/8086 Microprocessor Simulator/js/asm/lexer.js`
- [Expression evaluator](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/expressions.js): `Source Code/8086 Microprocessor Simulator/js/asm/expressions.js`
- [Macro expander](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/macros.js): `Source Code/8086 Microprocessor Simulator/js/asm/macros.js`
- [Operand parser](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/asm/operands.js): `Source Code/8086 Microprocessor Simulator/js/asm/operands.js`

### 8086 emulation

- [Instruction executor](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/executor.js): `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`
- [CPU machine](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/cpu.js): `Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`
- [Registers](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/registers.js): `Source Code/8086 Microprocessor Simulator/js/cpu/registers.js`
- [Segmented memory](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/memory.js): `Source Code/8086 Microprocessor Simulator/js/cpu/memory.js`
- [Processor flags](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/flags.js): `Source Code/8086 Microprocessor Simulator/js/cpu/flags.js`
- [Arithmetic unit](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/alu.js): `Source Code/8086 Microprocessor Simulator/js/cpu/alu.js`
- [Shift unit](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/cpu/shifter.js): `Source Code/8086 Microprocessor Simulator/js/cpu/shifter.js`
- [Interrupt services](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/interrupts.js): `Source Code/8086 Microprocessor Simulator/js/exec/interrupts.js`
- [String instructions](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/strings.js): `Source Code/8086 Microprocessor Simulator/js/exec/strings.js`
- [Virtual devices](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/js/exec/devices.js): `Source Code/8086 Microprocessor Simulator/js/exec/devices.js`

### Program collection

- [Program catalogue](https://github.com/amey-thakur/8086-assembly-language-programs/blob/main/Source%20Code/8086%20Microprocessor%20Simulator/programs.js): `Source Code/8086 Microprocessor Simulator/programs.js`
- [Instruction examples](https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Addressing%20Modes): `Source Code/Addressing Modes`
- [Algorithms and data](https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Sorting): `Source Code/Sorting`
- [System interfaces](https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/DOS%20Services): `Source Code/DOS Services`
- [Graphics programs](https://github.com/amey-thakur/8086-assembly-language-programs/tree/main/Source%20Code/Graphics): `Source Code/Graphics`

### Other components

- **Learner**

## Connections

- Learner → App controller: uses (evidence: `README.md`)
- App controller → Source editor: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → State inspector: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → Console I/O: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → Keyboard shortcuts: registers actions (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → Resizable panels: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → Program browser: uses (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- Program browser → Program catalogue: reads (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/library.js`)
- App controller → Two-pass assembler: assembles source (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → CPU machine: owns machine (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- App controller → Instruction executor: runs instructions (evidence: `Source Code/8086 Microprocessor Simulator/js/ui/app.js`)
- Two-pass assembler → Macro expander: expands macros (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/assembler.js`)
- Two-pass assembler → Source lexer: tokenizes source (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/assembler.js`)
- Two-pass assembler → Operand parser: parses operands (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/assembler.js`)
- Macro expander → Expression evaluator: evaluates expressions (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/macros.js`)
- Expression evaluator → Source lexer: parses literals (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/expressions.js`)
- Operand parser → Expression evaluator: evaluates expressions (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/operands.js`)
- Operand parser → Source lexer: parses numbers (evidence: `Source Code/8086 Microprocessor Simulator/js/asm/operands.js`)
- Instruction executor → Operand parser: resolves operands (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- Instruction executor → CPU machine: executes against (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- Instruction executor → Arithmetic unit: dispatches arithmetic (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- Instruction executor → Shift unit: dispatches shifts (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- Instruction executor → Interrupt services: dispatches interrupts (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- Instruction executor → String instructions: dispatches strings (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/executor.js`)
- CPU machine → Registers: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`)
- CPU machine → Segmented memory: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`)
- CPU machine → Processor flags: creates (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`)
- CPU machine → Virtual devices: creates services (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/cpu.js`)
- Arithmetic unit → Processor flags: updates flags (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/alu.js`)
- Shift unit → Processor flags: updates flags (evidence: `Source Code/8086 Microprocessor Simulator/js/cpu/shifter.js`)
- Interrupt services → CPU machine: uses machine state (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/interrupts.js`)
- String instructions → CPU machine: uses machine state (evidence: `Source Code/8086 Microprocessor Simulator/js/exec/strings.js`)
- State inspector → Learner: shows state (evidence: `README.md`)
- Console I/O → Learner: shows output (evidence: `README.md`)
- Program catalogue → Instruction examples: indexes programs (evidence: `Source Code/8086 Microprocessor Simulator/programs.js`)
- Program catalogue → Algorithms and data: indexes programs (evidence: `Source Code/8086 Microprocessor Simulator/programs.js`)
- Program catalogue → System interfaces: indexes programs (evidence: `Source Code/8086 Microprocessor Simulator/programs.js`)
- Program catalogue → Graphics programs: indexes programs (evidence: `Source Code/8086 Microprocessor Simulator/programs.js`)
