Скачиваний:
86
Добавлен:
11.02.2014
Размер:
134.14 Кб
Скачать

4. Условие задачи №2:

Написать макрокоманду для перестановки во всех двухразрядных десятичных BCD-числах, заканчивающихся заданной цифрой. С помощью этой макрокоманды обработать два массива, переставляя в 1-ом цифры в числах оканчивающихся на 3, а во 2-ом на 8.

  1. Граф-схема алгоритма решения второй задачи

.

Рисунок макроуровня

Подготовка, получение адресов, счетчик,

нуление регистров

Нет

Да

Запись рез-та без замены

Модификация адресов

Нет

Да

Рисунок макрокоманды

  1. Исходный текст программы для решения второй задачи

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

  1. Вывод

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

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

Список использованной литературы

  1. Комаров В.М. Микропроцессорные системы. программирование на ассемблере: Учебное пособие/ Ргата. Рыбинск, 2004.

15