80286:乘以10最快的方法是什么?

80286: Which is the fastest way to multiply by 10?

要将一个数乘以 2 的任意倍数,我会将它移动那么多次。

有没有这样的技巧可以在更少的周期内将数字乘以10?

80286 没有随 80386 引入的桶形移位器。根据 Microsoft Macro Assembler 5.0 文档 (1987) 中的时序表,SHL reg, immed8 需要 5+n 个周期,而 SHL reg, 1 需要 2 个周期。 ADD reg, reg 需要 2 个周期,MOV reg, regIMUL reg16, immed 需要 21 个周期。因此,乘以十的最快方法似乎是:

           ;       // cycles
shl ax, 1  ; *2    // 2
mov bx, ax ; *2    // 4
shl ax, 1  ; *4    // 6
shl ax, 1  ; *8    // 8
add ax, bx ; *10   // 10

或者,或者:

           ;      // cycles
mov bx, ax ; *1   // 2
shl ax, 1  ; *2   // 4
shl ax, 1  ; *4   // 6
add ax, bx ; *5   // 8
shl ax, 1  ; *10  // 10

十个循环。