要把一个数字乘以任何2的倍数,我会把它移很多次。
有没有这样的技术可以在较短的周期内将一个数字乘以10?
发布于 2020-04-04 21:12:51
80286没有一个桶移位器,那是与80386一起推出的。根据微软宏汇编程序5.0文档(1987年)中的时序表,SHL reg,immed8采用5+n周期,而SHL reg,1使用2个周期。添加 reg,reg需要2个周期,MOV reg,reg。IMUL 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不管是哪种方式都有十个周期。
https://stackoverflow.com/questions/61033121
复制相似问题