将数字乘以2的任意倍数,我将对其进行多次移位。
是否有这种技术可以在更少的周期内将数字乘以10?
SHL reg,immed8需要5 + n周期,而SHL reg, 1需要2个周期。 ADD reg,reg和MOV reg,reg一样需要2个周期。因此,最快的乘以十的方法似乎是:
; // 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
两种方式的十个循环。