
4. Условие задачи №2:
Написать макрокоманду для перестановки во всех двухразрядных десятичных BCD-числах, заканчивающихся заданной цифрой. С помощью этой макрокоманды обработать два массива, переставляя в 1-ом цифры в числах оканчивающихся на 3, а во 2-ом на 8.
-
Граф-схема алгоритма решения второй задачи
.
Рисунок макроуровня
Подготовка,
получение адресов, счетчик,
нуление регистров
Нет
Да
Запись рез-та без
замены
Модификация
адресов
Нет
Да
Рисунок макрокоманды
-
Исходный текст программы для решения второй задачи
n=100
NAME Ass2
.286
Data Segment
const1 db 3h
Arr1 Db 23h ;первый входной массив 23
Db 21h ;первый входной массив 21
Db 62h ;первый входной массив 62
Db 73h ;первый входной массив 62
endarr1 label byte
N1=(offset endArr1-offset Arr1) ;определяем длину массива по смещению + кол во чисел
Res1 Db N1 DUP (0) ; массив результатов для Arr1
Prob Db '$$$$'
const2 db 8h
Arr2 Db 48h ;первый входной массив 48
Db 53h ;первый входной массив 53
Db 39h ;первый входной массив 39
endarr2 label byte
N2=(offset endArr2-offset Arr2) ; определяем длину массива по смещению + кол во чисел
Res2 Db N2 DUP (0) ; массив результатов для Arr2
Prob1 DB '$$$$'
Data Ends
Code Segment
ASSUME CS:Code,DS:Data
Perest Macro Res,Const,Arr,N
local Z,z1,s
lea si,Arr ;загрузка адреса вх. массива
lea di,Res ;загрузка адреса рез-тата
lea bx,const ;загрузка константы
mov cx,N ;записываем счетчик
; xor ax,ax ;нулим регистр AX
; xor dx,dx ;нулим регистр DX
Z: mov al,[si] ;запись в регистр вх. массива
and al,0fh ;оставляем младшее число
cmp al,[bx] ;сравнение с заданным параметром
je z1 ;если равно переходим на z1
mov dl,[si]
mov [di],dl
jmp s
z1: shl ax,8 ;младший в старший 0a 00
mov al,[si] ;перед ah исходное 0а ba
shr ax,4 ;получаем 00 ab
mov [di],al ;записываем
jmp s
s: add si,type Arr ;модификация для следующего цикла
add di,type Arr ;модификация для следующего цикла
loop Z
Endm
Start:
mov Ax, Data
mov DS, Ax
Perest Res1,Const1,Arr1,N1 ;макровызов для обработки 1 массива
Perest Res2,Const2,Arr2,N2 ;макровызов для обработки 2 массива
Code ENDS
END Start
-
Вывод
Передача параметров в подпрограмму дает возможность с помощью одной и той же подпрограммы обрабатывать различные данные. Для этого на макроуровне перед вызовом подпрограммы необходимо передать в нее параметры, определяющие фактические данные, которые будут обрабатываться при этом вызове. В качестве фактических параметром используются указатель на данные, а передача параметров осуществляется через стек.
Макрокоманды также позволяют сократить длину исходного текста программы. Путем передачи параметров с помощью одной и той же макрокоманды можно обрабатывать различные данные. при написании сначала дается макроопределение макрокоманды относительно формальных параметров, а затем осуществляются макровызовы с передачей фактических данных.
Список использованной литературы
-
Комаров В.М. Микропроцессорные системы. программирование на ассемблере: Учебное пособие/ Ргата. Рыбинск, 2004.