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.
Top-level
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. 6 comments
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. |
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.