作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要将一个数字乘以 2 的任意倍数,我将对其进行多次移位。
有没有这样的技术可以在更少的周期内将数字乘以 10?
最佳答案
80286 没有桶形移位器,这是随 80386 一起引入的。根据 Microsoft 宏汇编器 5.0 文档 (1987) 中的时序表,SHL reg, immed8 需要 5+n 个周期,而 SHL reg, 1 需要 2 个周期。 ADD reg, reg 需要 2 个周期,MOV reg, reg 也是如此。 IMUL reg16, immed 需要 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
无论哪种方式都是十个周期。
关于assembly - 80286 : Which is the fastest way to multiply by 10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033121/
我是一名优秀的程序员,十分优秀!