Page 43 - 4989
P. 43

LEA ESI, array
                        або командою MOV з використанням оператора offset:
                        MOV ESI, offset array
                        Тоді звертання до елементів буде виглядати як [ESI].

                        Також  можна  утворювати  адресу  як  суму  двох  регістрів,
                  наприклад:
                        LEA EBX, array

                        MOV word ptr [EBX + ESI*2], 0
                        Тут  число  0  заноситься  в  елемент  масиву  двобайтових
                  елементів array з номером ESI. Оскільки розрядність константи 0
                  не  задана,  слід  явно  вказати  розрядність  комірки  пам’яті  за

                  допомогою модифікатора word ptr.

                        Приклад.  Знайти  суму  елементів  масиву  Х  цілих  чисел

                  розрядністю 4 байти довжиною 100 елементів.
                        MOV EAX, 0
                        MOV ESI, 0

                        M1:
                                ADD EAX, X[ESI*4]
                                INC ESI

                                CMP ESI, 100
                        JNE M1
                        Тут номер поточного елемента зберігається в регістрі ESI та
                  збільшується на 1 при кожному проходженні циклу.

                        Можна  було  застосувати  тут  і  непряму  адресацію  без
                  зміщення:
                        MOV EAX, 0

                        MOV ECX, 100
                        LEA ESI, X
                        M1:
                                ADD EAX, [ESI]

                                ADD ESI, 4
                                DEC ECX
                         JNZ M1

                        Тут масштабуючий множник не використовується, натомість
                  ESI кожен раз збільшується на розрядність одного елемента.





                                                                 43
   38   39   40   41   42   43   44   45   46   47   48