4 ms·
> Finally, the address adder increments and decrements the index registers used for block operations. It's kind of surprising to me that it's the address adder
by anyfoo 4y ago
> Finally, the address adder increments and decrements the index registers used for block operations.
It's kind of surprising to me that it's the address adder that increments/decrements the index registers. Since it's a direct operation on a register, naïvely I would have assumed it's the ALU doing that. Is it busy during that time?
EDIT: Having read a bit further, I guess it's because of the microcode's simplicity... so, with the microcode being as it is, using the BL flag to instruct the logic to use the address adder to increment/decrement the index register prevents needing additional ALU uops, which would make the instructions slower? So then I guess it would not have worked to make that BL flag instruct the ALU instead? Does anyone know any details?
- kens 4y agoI think the motivation is that the address adder already has the capability to increment/decrement registers by various constants: incrementing the PC, incrementing the address for an unaligned word access, correcting the PC from the queue size, etc. If you updated the SI/DI registers through the ALU, you'd need a separate mechanism to get the constants into the ALU, as well as controlling the ALU to do this. But using the address adder gets this functionality almost for free.