Примеры составления программ работы с массивами



Пример 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!