Assembly (x86-64, AArch64, RISC-V) Module 18 – 8-bit assembly: the 8051 microcontroller and the 8085
The 8085 for assembly programmers: a bridge
The 8085's accumulator, register pairs, flags and addressing modes set beside x86-64, AArch64 and RISC-V, with each 8085 program run in two simulators.
What you will learn
- Map the 8085's accumulator, register pairs and flags onto x86-64, AArch64 and RISC-V registers
- Predict which 8085 instructions write each of the five flags and which leave them alone
- Identify the four data addressing modes from the bytes of an 8085 listing
- Predict T-states and DAA results from Intel's tables and check them in two simulators
- Translate a shift-and-add multiply into RISC-V and compare the instruction counts
Before you start
What you’ll learn · Before you start
What you will learn
- Map the 8085's accumulator, register pairs and flags onto x86-64, AArch64 and RISC-V registers
- Predict which 8085 instructions write each of the five flags and which leave them alone
- Identify the four data addressing modes from the bytes of an 8085 listing
- Predict T-states and DAA results from Intel's tables and check them in two simulators
- Translate a shift-and-add multiply into RISC-V and compare the instruction counts
Before you start
On this page
Add 9AH and 7FH on an 8085 and the sum passes through one register: A, the accumulator, ends with 19H while a one-bit carry flag keeps the ninth bit. Nearly every 8-bit calculation works that way, and that is the first habit a programmer who knows x86-64, AArch64 or RISC-V must change.
Every 8085 program below runs in two simulators, Sim8085 and uCsim. One later part times loops in T-state: One period of the processor clock, the unit in which Intel's tables time 8085 instructions. How long a T-state lasts depends on the clock a board runs at.. Another corrects binary-coded decimal: A way of storing a decimal number with each digit in its own four bits, so that the byte 58H holds the decimal number 58. Packed BCD keeps two digits in one byte. sums with decimal adjust: An instruction that turns the binary sum of two packed BCD bytes back into a correct pair of decimal digits. The 8085 calls it DAA and the 8051 DA A.. A third sets a shift-and-add multiply beside RISC-V and raises one of the five A signal, usually from a device, that makes the processor set the running program aside after its current instruction, run a routine for that device and then carry on with the program..
Arithmetic goes through A; register pairs hold addresses
ADD B means A = A + B; no form adds into C or D. Every 8-bit add, subtract, logical operation and rotate reads
and writes A, and a compare subtracts from A, keeping only the flags. Only increments, decrements and the 16-bit
DAD do arithmetic in other registers. That makes the 8085 an accumulator machine: A processor design in which most arithmetic and logic instructions take one operand from a single register, the accumulator, and leave the result there. The 8085 and the 8051 both work this way..
The six others pair up as BC, DE and HL, register pair: Two 8-bit registers used together as one 16-bit register for values and memory addresses, such as BC, DE and HL on the 8085. for 16-bit values and
addresses, and M is the byte at the address in HL. A 16-bit stack pointer: The register that addresses the top of the stack: rsp on x86-64, sp on AArch64 and sp (x2) on RISC-V. Push, pop and function prologues move it; losing it loses the stack. More in “Registers on x86-64, AArch64 and RISC-V” and
program counter: The register that holds the address of the next instruction a processor will fetch: rip on x86-64, pc on AArch64 and RISC-V. It advances by each instruction's length, and branches, jumps, calls and returns write it. More in “Fetch, decode, execute: the program counter” complete the set. Their nearest matches, from
register files and
flags and condition codes:
| 8085 | x86-64 | AArch64 | RISC-V |
|---|---|---|---|
A, the one destination of 8-bit arithmetic and logic |
any of 16 registers | any of 31 registers | any of 31 registers |
BC, DE, HL: two 8-bit halves |
ah and al make ax |
w0 is the low half of x0 |
no narrower names |
M, the byte HL points to |
byte [rbx] |
ldrb w0, [x1] |
lbu a0, 0(a1) |
| S, Z, AC, P, CY in one byte | SF, ZF, AF, PF, CF at the same bits | N, Z, C, V | no flags |
SP, PC, 16 bits each |
rsp, rip |
sp, pc |
sp, pc |
256 ports for IN, OUT |
65,536 ports for in, out |
memory-mapped devices | memory-mapped devices |
Only IN and OUT reach the 8085’s port-mapped I/O: Device access through a separate address space of I/O ports, which x86 reaches only with the in and out instructions, instead of loads and stores to memory addresses. More in “16-bit x86: real mode and the 8086” space, which x86-64 kept;
AArch64 and RISC-V use memory-mapped I/O: Reaching a device through ordinary loads and stores: the device answers a range of physical addresses, so a store there writes one of its registers instead of RAM. More in “Bare metal: hello from the UART on QEMU”, ordinary loads and stores.
Checkpoint
Check: The accumulator and the register pairs
An add writes five flags; DAD writes one, INX none
Five condition flags: Single bits that an instruction sets to describe its result: zero, negative, carry and signed overflow. x86-64 keeps them in RFLAGS as ZF, SF, CF and OF, AArch64 in NZCV; RISC-V has none. More in “Flags and condition codes” describe the last result: Z (zero), S (bit 7), P (even
parity), the carry flag: The flag that records a carry out of the top bit of an addition, which means the unsigned sum did not fit. After a subtraction, x86-64's CF = 1 means a borrow, while AArch64's C = 1 means no borrow. More in “Flags and condition codes” CY (a carry out of bit 7, or a borrow) and AC (a carry out of
bit 3). PUSH PSW stores them in one byte, S at bit 7, Z at 6, AC at 4, P at 2 and CY at 0, the layout x86’s
LAHF still uses.
flags.asm shows which instructions write them: two adds and two increments, traced in Sim8085 and read back from uCsim:
; Which instructions change the flags: a move, an 8-bit add, a 16-bit add and two increments.
ORG 0000H
MVI A,0FFH ; A = FFH; a move changes no flag
ADI 01H ; A = 00H: Z = 1, CY = 1, AC = 1, P = 1
LXI H,1000H ; HL = 1000H
LXI D,0FFFH ; DE = 0FFFH
DAD D ; HL = 1FFFH: only CY changes, to 0
INX H ; HL = 2000H: no flag changes
INR A ; A = 01H: S, Z, AC and P change, CY does not
HLT
END """Trace flags.asm in Sim8085, one line per instruction, then read the same registers back from uCsim."""
import pathlib
import sys
sys.path.insert(0, str(pathlib.Path(__file__).parent / "sessions"))
import eightbit
# Two assemblers, then a byte-for-byte comparison of what each HEX file loads.
hexfile = eightbit.asm85("8085/flags.asm")
# Sim8085 prints A and the five flags after every instruction.
eightbit.sim8085(hexfile, "--trace")
# uCsim prints its flag byte (bit 7 S, 6 Z, 4 AC, 2 P, 0 CY) and the register pairs.
eightbit.ucsim85(hexfile, """
run
info registers
""") Output
$ asl -q -cpu 8085 -L -olist flags.lst -o flags.p 8085/flags.asm $ p2hex -q flags.p flags.hex $ sim8085-asm 8085/flags.asm flags-sim.hex # compare the bytes flags.hex and flags-sim.hex load same 14 bytes at the same addresses (0000H-000DH) $ sim8085-run --trace flags.hex 0000 MVI A,#$ff A=FF S=0 Z=0 AC=0 P=0 CY=0 T=7 0002 ADI #$01 A=00 S=0 Z=1 AC=1 P=1 CY=1 T=7 0004 LXI H,#$1000 A=00 S=0 Z=1 AC=1 P=1 CY=1 T=10 0007 LXI D,#$0fff A=00 S=0 Z=1 AC=1 P=1 CY=1 T=10 000a DAD D A=00 S=0 Z=1 AC=1 P=1 CY=0 T=10 000b INX H A=00 S=0 Z=1 AC=1 P=1 CY=0 T=6 000c INR A A=01 S=0 Z=0 AC=0 P=0 CY=0 T=4 000d HLT A=01 S=0 Z=0 AC=0 P=0 CY=0 T=5 halted at 000DH after 8 instructions, 59 T-states A=01 B=00 C=00 D=0F E=FF H=20 L=00 SP=FFFF flags S=0 Z=0 AC=0 P=0 CY=0 $ ucsim_i8085 -R 1 flags.hex < flags.u85 run info registers quit Simulation started, PC=0x000000 14 words read from flags.hex Stop at 0x00000e: (101) Halted F 0x00000e Simulated 59 ticks (5.900e-05 sec) SZXA-PVC Flags= 0x00 0 . A= 0x01 1 . 00000000 BC= 0xc9c3 [BC]= 0x6c 108 l DE= 0x0fff [DE]= 0xf4 244 . HL= 0x2000 [HL]= 0x7a 122 z SP= 0xdb81 -> 5df1 f095 c436 4738 c025 0897 aa79 12a8 9cda 7e28 988a 091e 0x000e c9 RET
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 flags_session.py
ADI 01H turned FFH into 00H and set Z, AC, P and CY. DAD D wrote CY alone: 1000H + 0FFFH fits in 16 bits, so
CY went to 0 while Z stayed 1. INX H wrote nothing, and INR A rewrote every flag but CY. uCsim agreed on every
register the program wrote; its BC = C9C3H is a random start value.
| Instructions | Flags they write |
|---|---|
ADD, ADC, SUB, SBB, CMP, ANA, ORA, XRA and their immediate forms |
all five |
INR, DCR |
all but CY |
DAD, RLC, RRC, RAL, RAR |
CY only |
INX, DCX, MOV, MVI, LXI |
none |
x86-64’s inc also keeps CF, AArch64 sets flags only in instructions such as adds and cmp, and RISC-V has no
flags: its branches compare registers.
Checkpoint
Check: Which instructions write the flags
Four addressing modes, told apart by their bytes
Intel’s manual names four The way an instruction says where its data is: in a register, in the instruction itself, or in memory at an address that the instruction or a register pair gives. for 8085 data. Direct: the instruction’s own bytes 2 and 3 hold the address, low byte first. Register: the instruction names a register or a pair. Register indirect: a pair holds the address. immediate: A constant written in an instruction and stored inside its encoding, such as the 5 of mov dword [rbx + 8], 5. AT&T syntax marks it with $ and AArch64 with an optional #, and each instruction set limits which values fit in one instruction. More in “Assembler syntax: NASM, GNU as, Intel and AT&T”: the data is in the instruction. modes.asm adds 9AH and 7FH with all four; step through it:
The drawing shows the whole scene; its 10 steps are listed below.
Every step as text
- LDA 2050H: direct. The address is in the instruction itself, bytes 2 and 3, low byte first: 3A 50 20. The byte at 2050H, 9AH, arrives in A.
- MOV B,A: register. Both operands are registers, named inside the one opcode byte 47H. B now holds a copy of 9AH and A keeps it too.
- LXI H,2051H: immediate. The 16-bit value 2051H is stored in the instruction, 21 51 20, and goes straight into the HL pair. No memory is read for it.
- MOV A,M: register indirect. M is the byte at the address held in HL. The one-byte instruction 7EH names only the pair, and the 8085 reads 2051H, which holds 7FH.
- ADD B: register. A = 7FH + 9AH = 119H, which needs nine bits. A keeps the low byte, 19H, and the carry out of bit 7 goes to CY.
- INX H: no flag changes. HL steps from 2051H to 2052H. INX writes no flag, so the carry from ADD B is still in CY for later.
- MOV M,A: register indirect. This time M is the destination: A, 19H, goes to the byte at 2052H, the address now in HL.
- MVI A,00H, ACI 00H: immediate. MVI puts 0 in A, and ACI adds the immediate 0 plus CY. With CY = 1 from ADD B, A becomes 01H: the carry as a byte.
- INX H, MOV M,A, HLT. HL becomes 2053H and the carry byte 01H is stored there. HLT stops the processor with 9A 7F 19 01 at 2050H.
- Both simulators agree. Sim8085 and uCsim both left 9A 7F 19 01 at 2050H and both counted 83 T-states. Every result landed in A; the other registers held a value or an address.
Both assemblers produced the same 20 bytes; the AS listing spells out each mode:
; Add two bytes with each of the 8085's four data addressing modes; store the sum and the carry.
ORG 0000H
LDA 2050H ; direct: A = the byte at 2050H
MOV B,A ; register: B = A
LXI H,2051H ; immediate: HL = 2051H, the address of the second byte
MOV A,M ; register indirect: A = the byte HL points to
ADD B ; register: A = A + B, CY = carry out of bit 7
INX H ; HL = 2052H; INX changes no flag, so CY survives
MOV M,A ; register indirect: the low byte of the sum
MVI A,00H ; immediate: A = 0
ACI 00H ; immediate: A = 0 + 0 + CY
INX H ; HL = 2053H
MOV M,A ; register indirect: the carry, 00H or 01H
HLT
ORG 2050H
DB 9AH, 7FH ; the two numbers
END """Assemble modes.asm with two assemblers, list its bytes, and run it in both 8085 simulators."""
import pathlib
import sys
sys.path.insert(0, str(pathlib.Path(__file__).parent / "sessions"))
import eightbit
# AS and Sim8085's own assembler, then a byte-for-byte comparison of their HEX files.
hexfile = eightbit.asm85("8085/modes.asm")
# The listing shows each instruction's address and bytes: the length tells the addressing mode.
eightbit.listing("modes.lst")
# The same program in Sim8085's core and in uCsim, with the four bytes at 2050H after the run.
eightbit.sim8085(hexfile, "--dump 2050:4")
eightbit.ucsim85(hexfile, """
run
dump /h rom 0x2050 0x2053
""") Output
$ asl -q -cpu 8085 -L -olist modes.lst -o modes.p 8085/modes.asm
$ p2hex -q modes.p modes.hex
$ sim8085-asm 8085/modes.asm modes-sim.hex
# compare the bytes modes.hex and modes-sim.hex load
same 20 bytes at the same addresses (0000H-2051H)
# modes.lst: line/address, bytes, source
1/ 0 : ; Add two bytes with each of the 8085's four data addressing modes; store the sum and the carry.
2/ 0 : ORG 0000H
3/ 0 : 3A 50 20 LDA 2050H ; direct: A = the byte at 2050H
4/ 3 : 47 MOV B,A ; register: B = A
5/ 4 : 21 51 20 LXI H,2051H ; immediate: HL = 2051H, the address of the second byte
6/ 7 : 7E MOV A,M ; register indirect: A = the byte HL points to
7/ 8 : 80 ADD B ; register: A = A + B, CY = carry out of bit 7
8/ 9 : 23 INX H ; HL = 2052H; INX changes no flag, so CY survives
9/ A : 77 MOV M,A ; register indirect: the low byte of the sum
10/ B : 3E 00 MVI A,00H ; immediate: A = 0
11/ D : CE 00 ACI 00H ; immediate: A = 0 + 0 + CY
12/ F : 23 INX H ; HL = 2053H
13/ 10 : 77 MOV M,A ; register indirect: the carry, 00H or 01H
14/ 11 : 76 HLT
15/2050 : ORG 2050H
16/2050 : 9A 7F DB 9AH, 7FH ; the two numbers
17/2052 : END
$ sim8085-run --dump 2050:4 modes.hex
halted at 0011H after 12 instructions, 83 T-states
A=01 B=9A C=00 D=00 E=00 H=20 L=53 SP=FFFF
flags S=0 Z=0 AC=0 P=0 CY=0
2050: 9A 7F 19 01
$ ucsim_i8085 -R 1 modes.hex < modes.u85
run
dump /h rom 0x2050 0x2053
quit
Simulation started, PC=0x000000
20 words read from modes.hex
Stop at 0x000012: (101) Halted
F 0x000012
Simulated 83 ticks (8.300e-05 sec)
0x2050 9a 7f 19 01 ....
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 modes_session.py
In modes.asm, an instruction’s length gives its mode away. LDA 2050H is three bytes, 3A 50 20.
MOV B,A and MOV A,M are one byte each: the registers, or the pair behind M, are coded in the opcode.
MVI A,00H and LXI H,2051H carry 8 and 16 bits of data. Both simulators ended with 9A 7F 19 01 at 2050H after 83
T-states; addressing modes shows the forms newer instruction sets add.
Checkpoint
Check: Four addressing modes in the bytes
Practise
Predict each result, then run a changed copy with the tools of 8-bit toolchains:
- In modes.asm, change 7FH to 66H. What do 2052H and 2053H hold?
- In flags.asm, replace
INX HwithINR L. What do HL and the flags hold after it? - Which mode does
LDAX Duse, and how many bytes is it?
The self-check below asks about the accumulator, the flags and the four modes.
Practice that adapts to you
Practise this lesson
12 questions about 7 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.
Counting T-states from Intel's timing table Pro: opens with a Pro, Premium or Ultimate pass
Each 8085 instruction takes a known number of clock periods, or one of two for a conditional jump, so the length of a loop can be worked out on paper before it runs. One loop’s count follows from Intel’s Table 5-1 and both simulators confirm it, and a 16-bit loop that ends far too early is reproduced and fixed.
In this part:
- A 255-pass delay loop works out to 3,579 T-states
- A 16-bit loop that stops after one pass, reproduced
1 diagram · 4 runnable examples (ASM, Python, delay16.asm, delay16_bad.asm) · about 6 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
DAA, BCD and two flags the simulators disagree on Pro: opens with a Pro, Premium or Ultimate pass
Packed BCD keeps one decimal digit in each half of a byte, and DAA repairs the binary sum of two such bytes. Intel’s two-step rule is worked on three sums, each run in both simulators, which disagree on two flags.
In this part:
- Intel’s two-step rule worked on 58 and 67, then on 93 and 08
- The auxiliary carry: Sim8085 sets it, uCsim keeps the old one
- 90 plus 80: a carry that DAA must keep, and uCsim loses
- Intel’s rule as a Python function
- Correct a binary sum to packed BCD with Intel's DAA rule
- Results of the sample tests
1 diagram · 4 runnable examples (ASM, Python, daa58.asm, daaintel.asm) · 1 exercise with sample tests · about 10 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
A multiply beside RISC-V, and the five interrupts Pro: opens with a Pro, Premium or Ultimate pass
The 8085 has no multiply instruction, so a product of two bytes is built from 16-bit shifts and adds, and its interrupts arrive on five pins, four of them with fixed addresses. Both run on the 8085 here, beside two RISC-V versions of the multiply and a look at what each simulator does with an interrupt.
In this part:
- 200 times 31 from shifts and adds, in 53 instructions and 411 T-states
- The same product on RISC-V: eleven instructions or one
- Five interrupt pins, and RST 7.5 raised in Sim8085
1 diagram · 6 runnable examples (ASM, Python, mul8.s, mulm.s) · about 9 minutes
Opening this part with your pass…
This part opens with any MySmartCoPilot pass.
- Pro pass · 1 week₹79$2.99
- 30 days₹179$5.99
- 1 year₹1,699$45
One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.
Passes can’t be bought right now, so this part can’t be opened at the moment. The free part above stands on its own. If you have a pass, enter your licence key.
It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).
Interview questions
What makes the 8085 an accumulator machine, and how does that shape a calculation?
Its 8-bit additions, subtractions, logical operations and rotates all read A and leave the result in A; a compare
subtracts from A and keeps only the flags. The other registers hold operands and addresses, and apart from
increments, decrements and DAD no arithmetic writes them. A calculation becomes a chain: load A, operate, store A,
and each partial result must leave A before the next step needs it. RISC-V’s add a2, a0, a1 names any three
registers and needs none of those moves.
Three harder questions follow: a delay to size, a flag byte that differs between simulators, and an interrupt that fires once.
-
Fresher to mid
An 8085AH board runs from a 6 MHz crystal, and a program must wait 10 ms between two readings of a switch. Write the delay as a subroutine with a 16-bit counter, give its pass count and its error, and say how you would check the timing before the code reaches the board.
-
Mid to senior
A regression test runs one 8085 BCD routine in two simulators and compares the flag byte that PUSH PSW stores after MVI A,93H, ADI 08H and DAA. One simulator stores 11H, the other 01H, and A is 01H in both. Which byte is right, how do you decide, and what should the test compare?
-
Fresher to senior
An 8085 program unmasks RST 7.5 with SIM and runs EI once at start-up. Its routine at 003CH stores a reading and ends with RET. In a test the first rising edge runs the routine, but no later edge ever does. Why, what would RIM show afterwards, and how should the routine end?
Flashcards · 4 cards
Recall it, then check
Say the answer to yourself before you look: recalling it is what makes it stick.
-
What makes the 8085 an accumulator machine, and how does that shape a calculation?
Its 8-bit arithmetic, logic and rotates read A and leave the result in A, so a calculation is a chain of load A, operate, store A. Only increments, decrements and DAD do arithmetic in other registers; RISC-V's add a2, a0, a1 needs none of those moves.
-
What are BC, DE, HL and M on the 8085?
BC, DE and HL pair the 8-bit registers into 16-bit values and addresses, and M names the byte in memory at the address held in HL.
-
Where do the 8085's five flags sit, and which instructions leave them alone?
At bits 7, 6, 4, 2 and 0 of one byte, the same places x86's LAHF still puts them. An add writes all five, DAD writes only CY, and INX writes none.
-
How can you tell an 8085 instruction's addressing mode from its bytes?
Its length and bytes give it away: direct, register, register indirect or immediate. A direct form carries a 16-bit address, an immediate form carries the data itself, and a register form is a single byte.
Key takeaways
- The 8085 is an accumulator machine: 8-bit arithmetic, logic and rotates read and write A, and only increments,
decrements and
DADdo arithmetic in other registers. - BC, DE and HL pair the other registers for 16-bit values and addresses, and
Mis the byte at the address in HL. - The five flags sit at bits 7, 6, 4, 2 and 0 of one byte, where x86’s
LAHFstill puts them;DADwrites only CY andINXwrites none. - An instruction’s length and bytes give its addressing mode away: direct, register, register indirect or immediate.
Terms in this lesson
- accumulator machine
- A processor design in which most arithmetic and logic instructions take one operand from a single register, the accumulator, and leave the result there. The 8085 and the 8051 both work this way.
- binary-coded decimal
- A way of storing a decimal number with each digit in its own four bits, so that the byte 58H holds the decimal number 58. Packed BCD keeps two digits in one byte.
- decimal adjust
- An instruction that turns the binary sum of two packed BCD bytes back into a correct pair of decimal digits. The 8085 calls it DAA and the 8051 DA A.
- register pair
- Two 8-bit registers used together as one 16-bit register for values and memory addresses, such as BC, DE and HL on the 8085.
- T-state
- One period of the processor clock, the unit in which Intel's tables time 8085 instructions. How long a T-state lasts depends on the clock a board runs at.
References
- MCS-80/85 Family User's Manual: the 8085A, its instruction set and Table 5-1 (Intel Corporation)
- 8080/8085 Assembly Language Programming Manual: DAA and the auxiliary carry flag (Intel Corporation)
- Intel 64 and IA-32 Architectures Software Developer Manuals: LAHF, INC and the I/O address space (Intel Corporation)
- Learn the architecture: A64 Instruction Set Architecture Guide (registers and condition flags) (Arm Limited)
- Learn the architecture: AArch64 memory attributes and properties (Device memory) (Arm Limited)
- RISC-V Ratified Specifications: RV32I base integer instruction set (branches and I/O) (RISC-V International)
- RISC-V Ratified Specifications: the M extension for multiplication and division (RISC-V International)
- Sim8085: an Intel 8085 simulator with assembler and debugger (Debjit Biswas)
- Sim8085 documentation: accuracy and CPU validation (Debjit Biswas)
- uCsim: microcontroller simulator, with its 8085 model (Daniel Drotos)
- The Macroassembler AS: releases (Alfred Arnold)
- llvm-mc: LLVM machine code playground (LLVM Project)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress