Here's what the main microcode loop for multiplication looks like. It rotates values right through carry (RRCY) and does ADDs subject to conditions. (Σ is the output from the ALU.) This loop executes 16 times to multiply 16-bit words.
Top-level
Here's what the main microcode loop for multiplication looks like. It rotates values right through carry (RRCY) and does ADDs subject to conditions. (Σ is the output from the ALU.) This loop executes 16 times to multiply 16-bit words. 8 comments
Multiplying signed (positive or negative numbers) is more complicated, with more micro-subroutines. This one turns both arguments positive, while tracking the signs in internal flag F1. Multiplication uses a 4-bit hardware loop counter and the special F1 flag. Here's what those features look like on the 8086 die. I removed the metal for this photo to show the silicon and the polysilicon wiring underneath. Instead of a loop, modern processors use a bunch of adders arranged in a special tree to perform a multiplication in a single clock cycle. The 8086 was very slow in comparison, taking up to 133 clock cycles for a 16-bit multiplication. For more information on multiplication in the 8086 and lots more microcode analysis, see my latest blog post https://www.righto.com/2023/03/8086-multiplication-microcode.html
[DATA EXPUNGED]
@kentindell Some computers, such as the Xerox Alto, let programmers write in microcode, but there are three problems with this. First, writing in microcode is very difficult because it is extremely low-level. Second, if you change the computer's internal architecture, the microcode changes and you need to rewrite it. Finally, rewritable microcode in RAM can have performance problems. It strikes me how the microcode really isn't very far from what we would call RISC instructions, in scope and complexity. Or plain old 6502 assembler for that matter. |
The left rotate through carry (LRCY) and right rotate through carry (LRCY) are key ALU operations in this process. They are like bit-shifts with more functionality. The bit shifted out of the word gets shifted into the carry flag, while the old carry bit enters the word.