Примеры составления программ работы с массивами
Пример 1.
Дан массив A[10] типа Integer . Ввести элементы массива с клавиатуры.
Реализация программы на Ассемблере:
%nolist
include mac.lib
%list
A_Stack segment Stack `стек`
DW 256 dup (0)
A_STACK ENDS.
A_Data segment
A dw 10 dup(?)
Mes1 db 10,13, ’введите элемент массива $’
Meser db 10,13, ’ Ошибка ввода. Повторите! ‘,10, 13, ‘ $’
Mes2 db 10,13, ’ Массив введен $’
A_Data Ends
A_Code Segment PARA PABLIC
Assume DS: A_Data, SS: A_Stack, CS; A_Code
START: ; подготовка к циклу
mov cx, 10 ; число элементов массива.
mov di, 0 ; i: = 1
CIKL: lea dx, mes1
mov ah,9h
int 21h
; макрос ввода с клавиатуры
Key_$2bin ; ввод числа со знаком в регистр ax.
Jnc good
Lea dx, meser
Mov ah,9h
Int 21h
Jmp cikl
Good: Mov А[DI], ax ; AX-> A[i]
; переадресация
ADD DI, 2 ; i: = i + 1
until: dec cx ; cx=cx-1
jz final ; при cx=0 на метку final
jmp CIKL; если CX не 0 , то безусловный переход на метку CIKL
final: lea dx,mes2
mov ah,9h
int 21h
; exit;
Mov ah, 4ch
Int 21h
A_Code ends
End start
Комментарий
В тело цикла включена макрокоманда Key_$2bin. После подстановки ее макрорасширения тело цикла может оказаться по размеру длиннее 128 байт, что превышает возможности команды LOOP, и она в данной программе не использована для управления циклом
Пример 2
Дан массив из 13 целых чисел со знаком. Найти сумму элементов, предшествующих 1-му нулевому элементу массива.
|
|
реализация программы на Ассемблере:
A_Stack segment Stack `стек`
DW 256 dup (0)
A_STACK ENDS.
A_Data segment
A dw 5 dup(-2), -1, 14, 0, 1, -20, 3, 0, 10
SUM dw ?
Count dw 13
A_Data Ends
A_Code Segment PARA PABLIC
Assume DS: A_Data, SS: A_Stack, CS; A_Code
START:
Mov AX, A_Data
Mov ds, ax
; подготовка к циклу
mov cx, count ; число элементов массива.
mov di, 0 ; i: = 1
mov BX, 0 ; sum : = 0
; подсчет суммы элементов, предшествующих 1-му нулевому элементу массива
:
repeat: cmp А [DI] , 0 ; a [i] ¹ 0 ?
jz final ; переход на выход
ADD BX, A [DI] ; sum : = sum + a [i]
ADD DI, 2 ; i: = i + 1
until: Loop repeat
final: mov s,bx
; вывод sum
mov ax,bx
print_number
Контрольные вопросы
1. Как описываются массивы в ассемблере?
2. Как организуется адресация элементов массива?
3. Какие виды косвенной адресации вам известны?
4. Как записывается косвенная регистровая адресация?:
5. Как записывается базовая регистровая адресация?: :
6. Как записывается регистровая индексная адресация?:
7. Можно ли в одном операнде использовать два индексных или два базовых регистра?
Лабораторная работа 6 . Макросы
Цель работы
|
|
· Получение навыков использования макрокоманд
· Применение директив условной трансляции.
· Получение навыков обмена данными между модулями.
6.2 Порядок выполнения работы:
· Повторение основных понятий макропрограммирования.
· Получение индивидуального задания.
· Составление и отладка программы.
· Оформление отчета.
· Демонстрация работы и защита отчета.
Порядок работы
Ознакомиться с теоретическими материалами по теме.
Разобрать лекционный пример.
Подобрать тестовые примеры к задаче по своему варианту.
Закодировать алгоритмы на ассемблере.
Получить исполняемый файл (.EXE)
Отладить программу.
Протестировать программу.
Оформить отчет и защитить
Содержание отчета
· Условие задачи.
· Схема иерархии модулей
· Таблица внешних спецификаций
· Таблица тестов
· Описание алгоритма каждого модуля
Текст программы и листинг с макрорасширениями
Задания
Исходными данными во всех вариантах заданы два массива целых чисел A[ n ] и B[ n ].
Необходимо:
· Составить макроопределение команды для выполнения заданного в варианте действия над числами.
· Передачу параметров в макроопределения выполнять только через заголовок макроопределений.
|
|
· Ввод и вывод массивов оформить в виде процедур с вызовом макрокоманд из библиотеки MAC.LIB.
Варианты:
1. Вычислить элементы массива С по формуле C[i]=A[i]+B[i]. Составить макроопределение для получения суммы двух чисел.
2. Вычислить элементы массива С по формуле C[i]=A[i]*B[i] . Составить макроопределение получения произведения двух чисел.
3. Вычислить элементы массива С по формуле C[i]=A[i]-B[i]. Составить макроопределение разности суммы двух чисел.
4. Вычислить элементы массива С по формуле C[i]=A[i]/B[i]. Составить макроопределение получения частного от деления двух чисел.
5. Вычислить элементы массива С по формуле C[i]=A[i] mod B[i]. Составить макроопределение получения остатка от деления двух чисел.
6. Вычислить элементы массива С по формуле C[i]=A[i]*A[i]+B[i]*B[i]. Составить макроопределение получения суммы квадратов двух чисел.
7. Вычислить элементы массива С по формуле C[i]=min(A[i] , B[i] ). Составить макроопределение получения величины минимального из двух чисел.
8. Вычислить элементы массива С по формуле C[i]=mах(A[i],B[i]). Составить макроопределение получения величины наибольшего из двух чисел.
9. Вычислить элементы массива С по формуле C[i]=(A[i]+B[i])/2. Составить макроопределение вычисления полу-суммы двух чисел.
|
|
10. Вычислить элементы массива С по формуле C[i]=(A[i]+B[i])2. Составить макроопределение получения квадрата суммы двух чисел.
11. Вычислить элементы массива С по формуле C[i]=A[i]*B[i]. Составить макроопределение получения произведения двух чисел.
12. Вычислить элементы массива С по формуле C[i]=|A [i]|+ |B[i]|. Составить макроопределение получения суммы модулей двух чисел.
13. Вычислить элементы массива С по формуле C[i]=(A[i]-B[i])2. . Составить макроопределение получения квадрата разности двух чисел
14. Вычислить элементы массива С по формуле C[i]=(A[i]-B[i])2. Составить макроопределение получения квадрата разности двух чисел
15. Вычислить элементы массива С по формуле C[i]=(A[i]+B[i])3. Составить макроопределение получения куба суммы двух чисел
16. Вычислить элементы массива С по формуле C[i]=(A[i]-B[i])3. Составить макроопределение получения куба разности двух чисел
17. Вычислить элементы массива С по формуле C[i]=A[i]*B[i]. Составить макроопределение получения произведения двух чисел.
18. Вычислить элементы массива С по формуле C[i]=|A [i]|- |B[i]|. Составить макроопределение получения разности модулей двух чисел.
19. Вычислить элементы массива С по формуле C[i]=(A[i]/B[i])2. . Составить макроопределение получения квадрата частного двух чисел
20. Вычислить элементы массива С по формуле C[i]=(A[i]-B[i])4. . Составить макроопределение получения разности двух чисел в четвертой степени.
Справочная информация
Дата добавления: 2019-02-12; просмотров: 218; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!