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


         

Правила записи параметров


Ранее составлен макрос для обмена местами двойных слов. Если необходимо менять местами слова, будем использовать другой макрос:

MACRO SWAPW        a, b

push     ax bx

mov     ax, a

mov     bx, b

mov     a, bx

mov     b, ax

pop      bx ax

endm

Если бы использовались функции, для каждого типа данных обязательно составлять новую функцию. Для макросов эти макроопределения могут быть объединены в одно, для этого необходимо научиться соединять параметры с постоянной частью или другими параметрами. Например, составляется м/о для работы с байтами или словами. В этом случае используются регистры ax или al cоответственно. Для задания этих регистров буква a используется как постоянная часть, а буквы x

или l являются параметрами.

Для объединения параметров с постоянной частью или другими параметрами используется знак &, т.е. запись имеет вид:

Параметр & Постоянная часть;

Постоянная часть & Параметр

Параметр & Параметр,

например a&Reg, где:

a        -Постоянная часть;

Reg    -Параметр.

Составим м/о для обмена местами данных для целых длиной 2 и 4 байта.

IDEAL

p586

model           flat

extrn ExitProcess:proc

dataseg

firstd          dd      1

secondd         dd      2

firstw          dw      1

secondw         dw      2

codeseg

begin:

MACRO   SWAP    a, b, type

push    type&ax type&bx

mov     type&ax, a

mov     type&bx, b

mov     a, type&bx

mov     b, type&ax

pop     type&bx type&ax

endm

SWAP    [firstw], [secondw]

SWAP    [firstd], [secondd], e

call      ExitProcess

end begi

n

А теперь попытаемся составить м/о таким образом, чтобы его можно было использовать и для байтов. В этом случае в качестве регистров можно использовать регистры al

и bl, т.е. параметром является не только первая, но и последняя буква имени регистра:

Программа для этого варианта имеет вид:

IDEAL

p586

model           flat

extrn ExitProcess:proc

dataseg



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