Організація взаємодії процедур через таблицю адрес параметрів мовою асемблера

Страницы работы

Содержание работы

Мета роботи: Здобуття та закріплення практичних навичок у організації взаємодії процедур через таблицю адрес параметрів мовою асемблера.

1.Індивідуальне завдання

    Задано масив А із 100 елементів (констант типу WORD). Структура масиву А:

          -------------------------

          | X1 | Y1 | X2 | Y2 |...|

          -------------------------

 Сформувати масив В із елементів Хі, для яких виповнюється: Хі=Yі.

2.Алгоритм вирішення

   Описано 2 масиви. Далі в циклі в АХ та ВХ записуються 2 послідовні елементи масиву А. Якщо вони рівні то їх значення записується в масив В та лічильник однакових елементів збільшується на 1. Інакше – лічильник циклу зменшується і розглядаються 2 наступні елементи. Цикл повторюється 50 разів.

3.Блок-схема алгоритму


4.Вибір змінних для написання программи

   А - вхідний масив із 100 констант.

   В – вихідний масив із 50 чисел. Для запису однакових значень масиву А.

   Т – строка для виводу інформації на монітор.

   N - лічильник циклів перевірок масиву А.

5.Текст програми на асемблері

  DATA segment

     A dw 10 dup(2,2,-1,-1,5,6,7,4,4,4)    ; vxodawij  massiv

     B dw 50 dup(0)                        ; vixodawij massiv

     T db 'Procedures',0ah,0dh,'$'         ; text

     N dw 50                               ; kol-vo elementov v A

     TA dw 3 dup(?)                        ; tablica adresov

  DATA ends

 CODE segment

   assume  cs:CODE,ds:DATA

Begin:mov   ax,data

      mov   ds,ax

      mov   ah,9h

      lea   dx,t                           ; soobshenie na ekran

      int   21h

      lea   bx,ta

      lea   ax,A

      mov   [bx],Ax

      lea   ax,B

      mov   [bx+2],ax

      lea   ax,N

      mov   [bx+4],ax

      call  far ptr pr1                    ; vizov proceduri

      mov   ah,4ch                         ; normalnoe zavershenie raboti

      int   21h

 CODE ends

 CODE1 segment

    assume cs:code1

     pr1      proc far

     push     ax

     push     cx

     push     dx

     push     si

     push     di

     mov      si,[bx+4]           ; zagrujaem N

     mov      cx,[si]             ; schetchik

     mov      si,[bx+2]           ; massiv B

     mov      di,[bx]             ; massiv A   

     xor      ax,ax

     mov      dx,ax

  m1:mov     ax,[di]              ; v ax zapisivaem A[0] (na pervom proxode)

     mov     dx,[di+2]            ; v bx zapisivaem sledujuwij element

     cmp     ax,dx                ; sravnenie (ax-dx)

     jne     m2                   ; esli ax!=dx

     mov     [si],ax              ; esli ax==dx

     add     si,2                 ; perexod na sled. element B

  m2:add     di,4                 ; perexod na sled. element A   

     loop    m1                   ; na nachalo cikla

     pop     di

     pop     si

     pop     dx

     pop     cx

     pop     ax     

     ret                          ; vozvrat

     pr1   endp

 CODE1 ends

   end BEGIN

6.Результати роботи програми

Массив B до виконання дій над ним:

-d ds:c7

13CC:00C0                       00-00 00 00 00 00 00 00 00          .........

13CC:00D0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CC:00E0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CC:00F0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CC:0100  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CC:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CC:0120  00 00 00 00 00 00 00 00-00 00 00 00 50 72 6F 63   ............Proc

13CC:0130  65 64 75 72 65 73 0A 0D-24 32 00 00 00 00 00 00   edures..$2......

13CC:0140  00 00 00 00 00 00 00                              .......

Массив B після виконання дій над ним:

-d ds:c7

13CD:00C0                       00-02 00 FF FF 04 00 02 00          .........

13CD:00D0  FF FF 04 00 02 00 FF FF-04 00 02 00 FF FF 04 00   ................

13CD:00E0  02 00 FF FF 04 00 02 00-FF FF 04 00 02 00 FF FF   ................

13CD:00F0  04 00 02 00 FF FF 04 00-02 00 FF FF 04 00 02 00   ................

13CD:0100  FF FF 04 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CD:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................

13CD:0120  00 00 00 00 00 00 00 00-00 00 00 00 50 72 6F 63   ............Proc

13CD:0130  65 64 75 72 65 73 0A 0D-24 32 00 00 00 C8 00 39   edures..$2.....9

13CD:0140  01 00 00 00 00 00 00                              .......

Висновки: На даній лабораторній роботі я придбав та закріпив навички у написанні та відладці програм мовою асемблера із використанням таблиці адрес.

Похожие материалы

Информация о работе