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

问题描述 投票:1回答:1

将数字乘以2的任意倍数,我将对其进行多次移位。

是否有这种技术可以在更少的周期内将数字乘以10?

assembly x86-16 micro-optimization
1个回答
1
投票
80286没有随80386一起引入的桶形移位器。根据Microsoft Macro Assembler 5.0文档(1987)中的时序表,

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

两种方式的十个循环。
© www.soinside.com 2019 - 2024. All rights reserved.