Программирование на Ассемблере


Организация вложенных циклов


Пусть необходимо реализовать участок программы:

For      (i=0; i<n; i++)

   For (j=0; j<m; j++)

      …

Можно для параметров цикла использовать разные регистры – но регистров мало. В этом случае, если для параметров достаточно 16 битных значений можно использовать один регистр для двух параметров.

Пример 1. Пусть необходимо реализовать участок программы

For      (i=0; i<5; i++)

   For (j=0; j<6; j++)

      …

; For    (i=0; i<5; i++)

mov     ecx, 5

shl        ecx, 16; Счетчик в старшую часть регистра

for1:



;   For (j=0; j<6; j++)

mov     cx, 6

for2:

  …

dec       cx

jnz        for2

sub       ecx, 10000h

jnz        for1

Пример 3. Составить программу для вычисления произведений всех элементов вида a[0] * b[0], a[0] * b[1], … a[0] * b[m-1]  ,…a[n-1] * b[m-1]:

P=1;

For (i=0; i<n; i++){

      For (j=0; j<m; j++)    P=p*a[i]*b[j];

}

; P=1;

mov     eax, 1

;For (i=0; i<n; i++){

mov     ecx, [n]

shl        ecx, 16

mov     ebx, offset a

;      For (j=0; j<m; j++)  

fori:

mov     cx, [m]

mov     esi, offset b

;  P=p*a[i]*b[j];

forj:

   mul   [dword ptr ebx]

   mul   [dword ptr esi]

;}

   add   esi, 4

   dec    cx

   jnz     forj

   add  ebx, 4

   dec    ecx, 4

   jnz     fori



Содержание раздела