Изучение подпрограмм языка ассемблера

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

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

Федеральное агенство по науке и образованию

Красноярский Государственный Технический Университет

Лабораторная работа по ЦУиМП №2

Изучение подпрограмм языка ассемблера

Вариант 1

Выполнил: студент гр.Р52-4

Дианов А.В.

Проверил:

Сушкин И.Н.

Красноярск 2005

1.  Блок-схема программы.

2.  Алгоритм работы программы.

В ходе работы программы поэлементно считываются 2-х байтовые числа из 1-го массива, проверяются в подпрограмме по маске, и, в случае совпадения числа с маской, производится его запись во 2-й массив.

3.  Листинг программы.

code_ segment para 'code' ; Начало сегмента кода выровненного на границу параграфа

assume cs:code_,ds:data_ ; Связывание имен сегментов с сегментными регистрами

.286

main:

          mov ax,data_   ; Инициализация сегментного

          mov ds,ax        ; регистра ds

          lea si,array1     ; Загрузка в регистр si адреса 1-го (исходного) массива

          lea di,array2     ; Загрузка в регистр di адреса 2-го (пустого) массива

          mov cx,10        ; Запись в регистр-счетчик количества повторений=10

next_el:

          mov ax,ds:[si]  ; Считываем в регистр ax очередное число из 1-го массива 

          call cmp_         ; Вызываем подпрограмму обработки числа по маске

          add si,2            ; Увеличиваем на 1 индекс проверяемого элемента 1-го массива

          loop next_el     ; Если не дошли до конца 1-го массива, перейти на метку next_el

          mov ax,4c00h  ; иначе,стандартное

          int 21h             ; завершение программы

cmp_ proc                  ; Заголовок подпрограммы обработки числа по маске

          mov dx,ax        ; Сохраняем копию содержимого регистра ax в регистр dx

          and ax,1024h   ; Выполняем операцию И над регистром ax и маской 1024h

          cmp ax,1024h  ; Если 2,5,12 разряды ax не равны 1,

          jne exit_p         ; переходим на метку exit_p

          mov ds:[di],dx ; иначе, сохраняем копию числа во 2-м массиве

          add di,2           ; и увеличиваем на 1 индекс записываемого элемента 2-го массива

exit_p:

          ret                    ; Стандартный выход из подпрограммы

cmp_ endp                 ; Конец описания подпрограммы

code_ ends                ; Конец сегмента кода

data_ segment para use16 'data' ; Сегмент данных, выровненный на границу параграфа

array1 dw 4,0ffffh,32,3566,4096,6,1024h,7,0f0f4h,10 ; 1-й массив

array2 dw 10 dup (0) ; 2-й массив

data_ ends                  ; Конец сегмента данных

end main

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

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