Передача параметров по значению

Пример Вычислить max(a,b) + max(5,a-1)

Решение. Опишем процедуру вычисления максимума двух переменных.

Для передачи первого параметра будем использовать регистр AX, для второго - регистр BX. Результат процедура будет помещать в регистр AX.

model small

.stack 128

.data

A dw?

B dw?

REZ dw?

.code

; процедура вычисляет максимальное из двух чисел

; первое число в AX, второе - в BX

; результат помещается в AX

MAX proc

cmp ax,bx

jge M

mov ax,bx

M: ret

MAX endp

start:...

mov ax,A

mov ax,B

call MAX; результат в AX

mov rez,ax

mov ax,5

mov bx,A

dec bx

call MAX; результат в AX

add rez,ax

...

end start

Передача параметра по ссылке

Пример Число (неотрицательное) разделить на 16. И оставить там же, где находилось.

Для сравнения с паскалем procedure DEL (var x: integer) Параметр-переменная

Основная программа записывает в регистр адрес фактической переменной.

В качестве регистра необходимо выбирать регистр-модификатор. Пусть BX.

Процедура

; делит неотр. xисло X на 16

; в регистре BX - адрес X Результат записывается в X

DEL proc near

mov cl,4

shr word ptr [bx],cl

ret

DEL endp

Основная программа

; адрес числа в регистре BX

lea bx, A

call DEL

lea bx, B

call DEL

Задача.

Даны два массива однобайтовых чисел без знака. Найти сумму их максимальных элементов.

Опишем нахождение максимального элемента массива процедурой.

Формальными параметрами процедуры являются начальный адрес массива, количество элементов массива.

Будем передавать параметры через регистры. Адрес массива - через регистр BX. Кол-во элементов - через CX

Результат возвращаем основной программе через AL (элементы однобайтовые).

Masm

model small

.stack 128

.data

n equ 10

m equ 15

mas1 db n dup (?)

mas2 db m dup (?)

; процедура находит максимальный элемент массива

; адрес массива находится в регистре BX

; кол-во элементов - в CX

; результат возвращаем через AL

max proc

mov al,0;

sled: cmp [bx],al

jle new

mov al,[bx]

new: inc bx

loop sled

ret

max endp

start:...

lea bx,mas1

mov cx,n

call max; результат в al

mov dl,al

lea bx,mas2

mov cx,m

call max

add dl,al

...

end start


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: