Page 213 - ARM 64 Bit Assembly Language
P. 213

Integer mathematics 201

                                         Dividend:   0   1   0    1   1    1   1   0
                                          Divisor:   0   1   1    1   0    0   0   0
                                          Counter:   0   0   0    0   0    1   0   0

                     Next, we allocate a register for the quotient and initialize it to zero. Then, according to the
                     algorithm, we repeatedly subtract if possible, shift to the right, and decrement the counter.
                     This sequence continues until the counter becomes negative. For our example this results in
                     the following sequence:

                                                                     ⎫
                        Quotient:  0   0    0   0    0   0   0    0  ⎪
                                                                     ⎪ Divisor > Dividend: No subtract,
                                                                     ⎪
                       Dividend:   0   1    0   1    1   1   1    0  ⎬
                                                                        shift 0 into Quotient, decrement
                         Divisor:  0   1    1   1    0   0   0    0  ⎪
                                                                     ⎪ Counter, shift Divisor right
                                                                     ⎪
                        Counter:   0   0    0   0    0   1   0    0  ⎭
                                                                     ⎫
                        Quotient:  0   0    0   0    0   0   0    0  ⎪
                                                                     ⎪ Divisor <= Dividend: Subtract,
                                                                     ⎪
                       Dividend:   0   1    0   1    1   1   1    0  ⎬
                                                                        shift 1 into Quotient, decrement
                         Divisor:  0   0    1   1    1   0   0    0
                                                                     ⎪ Counter, shift Divisor right
                                                                     ⎪
                                                                     ⎪
                        Counter:   0   0    0   0    0   0   1    1  ⎭
                                                                     ⎫
                        Quotient:  0   0    0   0    0   0   0    1  ⎪
                                                                     ⎪ Divisor <= Dividend: Subtract,
                                                                     ⎪
                       Dividend:   0   0    1   0    0   1   1    0  ⎬
                                                                        shift 1 into Quotient, decrement
                         Divisor:  0   0    0   1    1   1   0    0
                                                                     ⎪ Counter, shift Divisor right
                                                                     ⎪
                                                                     ⎪
                        Counter:   0   0    0   0    0   0   1    0  ⎭
                                                                     ⎫
                        Quotient:  0   0    0   0    0   0   1    1  ⎪
                                                                     ⎪ Divisor > Dividend: No subtract,
                                                                     ⎪
                       Dividend:   0   0    0   0    1   0   1    0  ⎬
                                                                        shift 0 into Quotient, decrement
                         Divisor:  0   0    0   0    1   1   1    0  ⎪
                                                                     ⎪ Counter, shift Divisor right
                                                                     ⎪
                        Counter:   0   0    0   0    0   0   0    1  ⎭
                                                                     ⎫
                        Quotient:  0   0    0   0    0   1   1    0  ⎪
                                                                     ⎪ Divisor <= Dividend: Subtract,
                                                                     ⎪
                       Dividend:   0   0    0   0    1   0   1    0  ⎬
                                                                        shift 1 into Quotient, decrement
                         Divisor:  0   0    0   0    0   1   1    1
                                                                     ⎪ Counter, shift Divisor right
                                                                     ⎪
                                                                     ⎪
                        Counter:   0   0    0   0    0   0   0    0  ⎭
                                                                     ⎫
                        Quotient:  0   0    0   0    1   1   0    1  ⎪
                                                                     ⎪
                                                                     ⎪
                       Dividend:   0   0    0   0    0   0   1    1  ⎬
                                                                         Counter < 0: We are finished
                         Divisor:  0   0    0   0    0   0   1    1  ⎪
                                                                     ⎪
                                                                     ⎪
                        Counter:   1   1    1   1    1   1   1    1  ⎭
   208   209   210   211   212   213   214   215   216   217   218