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

Директива LOCAL


Директива используется для определения структуры локальной области и ее размера. Сама локальная область не создается. Для ее создания необходима команда SUB ESP, Размер или команда ENTER.

Общий вид директивы:

LOCAL Параметр1, Параметр2,… = Переменная

Локальные параметры задаются точно также, как формальные параметры, т.е. задается имя, тип и, возможно, количество. Размер локальной области присваивается на этапе компиляции переменной, заданной в конце директивы . Переменная используется в командах выделения локальной области.

Пример. Составить главную программу и функцию на ассемблере

int Fun (int x){

   int a, b[2];

   a=x; b[0]=b[1] = 2 *x;

   return a+ b[0] + b[1];

}

; Главная программа

;Int Fun (int x){

;   Int a, b[2];



;   a=x; b[0]=b[1] = 2 *x;

;   return a+ b[0] + b[1];

;}

ideal

p686

model flat

extrn ExitProcess:proc

extrn Fun:proc

dataseg

x          dd        5

y          dd        ?

codeseg

begin:

push     [x]

call      Fun

mov     [y], eax

call ExitProcess

end begin

; Функция

;Int Fun (int x){

;   Int a, b[2];

;   a=x; b[0]=b[1] = 2 *x;

;   return a+ b[0] + b[1];

;}

ideal

p686

model flat

codeseg

begin:

proc Fun

public Fun

arg x:dword = z1

local a:dword, b:dword:2=z2

push     ebp

mov     ebp, esp

sub       esp, z2

mov     eax, [x]

mov     [a], eax

mov     [b], eax

add      [b], eax

mov     [b+4], eax

add      [b+4], eax

mov     esp, ebp

pop      ebp

ret        z1

endp

end




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