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


         

11.2.2.4 Передача в списке параметров одномерных массивов


Для одномерных массивов – и исходных данных и результатов – передаются адреса. Это исключает необходимость копирования исходных массивов.

    

Пример 1.  Составить функцию для объединения двух строк  и использовать ее для объединения строк, содержащих слова "first  " и "second " в одну строку.

IDEAL

P586

MODEL FLAT

Extrn ExitProcess:proc

DATASEG

str1   db   'first ', 0

str2   db   'second', 0

rez    db    (rez-str1-1) dup (?)

CODESEG

begin:

push     offset str1 offset str2 offset rez  ; передача адресов массивов

call strcat  ;вызов процедуры

call ExitProcess

proc strcat;

0

EBP

push ebp;

4

EIP

mov  ebp,  esp;

8

REZ

Push eax ebx ecx;

12

STR2

; for (I=0; str1[I]; I++) rez[I]=str1[i];

16

STR1

Mov EAX, [EBP+16];

Mov EBX, [EBP+8];

For1:

Mov CL, [EAX]

Test Cl, cl

Je break1

Mov [EBX], cl

Inc eax

Inc ebx

Jmp For1

Break1:

Mov EAX, [ebp+12]

For2:

Mov CL, [EAX]

Mov [EBX], cl

Test Cl, cl

Je break2

Inc eax

Inc ebx

Jmp For2

Break2:

Pop ecx ebx eax ebp

Ret 12

Endp

End begin

     В этом примере признаком конца исходных данных является  нулевой завершитель (символ с кодом 0). В результирующую строку завершитель записывается после копирования второй строки. Для  массивов исходных данных (str1, str2) и массива результата (rez) передаются адреса. Это делается для  экономии  стекового  простран-

ства и числа команд, необходимых для передачи параметров.

Пример 2.  Составить программу для записи в третий массив тех чисел первого, которых нет во втором.

ideal

p386

model   flat

extrn ExitProcess:proc

dataseg

x          dd        1,2,3,4,5,6




Содержание  Назад  Вперед