要将一个数字乘以 2 的任意倍数,我将对其进行多次移位。
有没有这样的技术可以在更少的周期内将一个数字乘以 10?
80286 没有随 80386 一起引入的桶形移位器。根据 Microsoft Macro Assembler 5.0 文档 (1987) 中的时序表,SHL 注册,immed8需要 5+n 个周期,而SHL reg, 1需要2个周期。ADD reg, reg需要 2 个周期,同样MOV reg, reg. IMUL reg16,即时需要21个周期。因此,乘以 10 的最快方法似乎是:
; // 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
十个循环,无论哪种方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)