AMD Typewriter x86 사용자 설명서
78
Replace Divides with Multiplies
AMD Athlon™ Processor x86 Code Optimization
22007E/0—November 1999
Signed Division
Utility
Utility
In the opt_utilities directory of the AMD documentation
CDROM, run sdiv.exe in a DOS window to find the fastest code
for signed division by a constant. The utility displays the code
after the user enters a signed constant divisor. Type “sdiv >
example.out” to output the code to a file.
CDROM, run sdiv.exe in a DOS window to find the fastest code
for signed division by a constant. The utility displays the code
after the user enters a signed constant divisor. Type “sdiv >
example.out” to output the code to a file.
Unsigned Division
Utility
Utility
In the opt_utilities directory of the AMD documentation
CDROM, run udiv.exe in a DOS window to find the fastest code
for unsigned division by a constant. The utility displays the code
after the user enters an unsigned constant divisor. Type “udiv >
example.out” to output the code to a file.
CDROM, run udiv.exe in a DOS window to find the fastest code
for unsigned division by a constant. The utility displays the code
after the user enters an unsigned constant divisor. Type “udiv >
example.out” to output the code to a file.
Unsigned Division by Multiplication of Constant
Algorithm: Divisors
1 <= d < 2
1 <= d < 2
31
, Odd d
The following code shows an unsigned division using a constant
value multiplier.
value multiplier.
;In:
d = divisor, 1 <= d < 2^31, odd d
;Out: a = algorithm
;
;
m = multiplier
;
s = shift factor
;algorithm 0
MOV
MOV
EDX, dividend
MOV
EAX, m
MUL
EDX
SHR
EDX, s ;EDX=quotient
;algorithm 1
MOV
MOV
EDX, dividend
MOV
EAX, m
MUL
EDX
ADD
EAX, m
ADC
EDX, 0
SHR
EDX, s ;EDX=quotient
Derivation of a, m, s
The derivation for the algorithm (a), multiplier (m), and shift
count (s), is found in the section “Unsigned Derivation for
Algorithm, Multiplier, and Shift Factor” on page 93.
count (s), is found in the section “Unsigned Derivation for
Algorithm, Multiplier, and Shift Factor” on page 93.
Algorithm: Divisors
2
2
31
<= d < 2
32
For divisors 2
31
<= d < 2
32
, the possible quotient values are
either 0 or 1. This makes it easy to establish the quotient by
simple comparison of the dividend and divisor. In cases where
the dividend needs to be preserved, example 1 below is
recommended.
simple comparison of the dividend and divisor. In cases where
the dividend needs to be preserved, example 1 below is
recommended.