Разработка программы при помощи языка низкого уровня ассемблер
Обновлено
ВОЛЖСКИЙ УНИВЕРСИТЕТ ИМЕНИ В.Н. ТАТИЩЕВА
Кафедра «Информатика и системы управления»
Курсовая работа
по дисциплине: «Организация ЭВМ»
Вариант - 107
- Содержание
- Введение
- 1 Постановка задачи
- 2 Описание и схема алгоритма
- 3 Листинг программы
- Заключение
- Список литературы
model small
include io.asm
.data
add_elem db 10, 13, 'Введите элементы матрицы : $'
ishod_matrix db 10, 13, 'Исходная матрица : $'
preobr_matrix db 10, 13, 'Преобразованная матрица : $'
tab db 10, 13, ' $'
pustie_str db 10, 13, 10, 13, 10, 13,'$'
probel db ' $'
m dw 4 ; размерность квадратной матрицы
matrix dw 4 dup (4 dup (?)) ; матрица
mas1 dw 4 dup(?)
zn_chereduetsa db 10,13,'Знаки чередуются $'
zn_nechereduetsa db 10,13,'Знаки не чередуются $'
.stack 100h
.code
start:
mov ax, @data
mov ds, ax
mov es, ax
;--------------------------------------------------- очистка экрана
mov ah, 06 ; 6-я функция ...
mov al, 0 ; весь экран прокрутить
mov bh, 7 ; с цветами черный-белый
mov dx, 184Fh ; границы экрана: нижний правый...
mov cx, 0 ; ... и верхний левый углы
int 10h ; ... 10-го прерывания
;--------------------------------- установка курсора в верхний левый угол
MOV AH,2 ; 2 функция...
MOV BH,0 ; координаты
MOV DX,0 ; координаты
INT 10H ; ... 10-го прерывания
;--------------------------------- Ввод матрицы --------------------
lea dx, add_elem
mov ah, 09h
int 21h
lea dx, pustie_str
mov ah, 09h
int 21h
lea dx, tab ; выводим смещение на сл. строку для красоты
mov ah, 09h
int 21h
mov cx, 4 ; количество строк
mov bx, 0 ; обнуляем bx - смещение по строкам
m1: ;
push cx ; сохраняем cx - количество строк
mov cx, m ; сl <- количество столбцов(элементов в строке)
mov si, 0 ; обнуляем si - смещение внутри строки(по столбцам)
m2: ; с этой метки начинается ввод элемента в строку
inint matrix[bx][si]
lea dx, probel ; выводим на экран пробел для красоты
mov ah, 09h
int 21h
inc si ; увеличиваем смещение на 1
inc si
loop m2 ; если не равны, значит строка не закончилась т.е. заново вводим
pop cx ; востанавливаем количество строк
mov ax, m ; в al <- размер строки
add bx, ax ; bx=bx+ax (переводим смещение на сл. строку)
add bx, ax
lea dx, tab ; выводим смещение на сл. строку для красоты
mov ah, 09h
int 21
newline
loop m1 ; если не равны значит строки не окончены т.е. заново
;------------------------------------- очистка экрана
mov ah, 06 ; 6-я функция ...
mov al, 0 ; весь экран прокрутить
mov bh, 7 ; с цветами черный-белый
mov dx, 184Fh ; границы экрана: нижний правый...
mov cx, 0 ; ... и верхний левый углы
int 10h ; ... 10-го прерывания
;-------------------------------- установка курсора в верхний левый угол
MOV AH,2 ; 2 функция...
MOV BH,0 ; координаты
MOV DX,0 ; координаты
INT 10H ; ... 10-го прерывания
;-------------------- вывод матрицы на экран
lea dx, ishod_matrix ; исходная матрица -
mov ah, 09h
int 21h
lea dx, tab ; выводим на экран смещение
mov ah, 09h
int 21h
mov cx, m ; количество строк
mov bx, 0 ; номер строки
_m1: ;
push cx ; сохраняем
mov cx, m ; для того чтобы ввести количество столбцов
mov si, 0 ; номер столбца
_m2:
outint matrix[bx][si] ; выводим элемент матрицы
lea dx, probel ; далее выводим пробел
mov ah, 09h
int 21h
inc si; переходим на сл. столбец (элемент строки)
inc si
loop _m2 ; если не конец строки, то заново
pop cx ; востанавливаем количество строк
mov ax, m ;
add bx, ax ; переход на сл. строку матрицы
add bx, ax
lea dx, tab ; выводим на экран смещение
mov ah, 09h
int 21h
loop _m1 ; если не последняя строка, заново
;1- преобразование одномерной матрици
mov cx, m ; количество сок
mov bx, 0; номер строки
xor di,di
_mm1: ;
push cx ; сохраняем
mov cx, m ; для того чтобы ввести количество столбцов
mov si, 0 ; номер столбца
mov dx, matrix[bx][0] ; max=matrix[i][0]
_mm2:
cmp dx, matrix[bx][si] ; если matrix[i][j]<max то ререход на след элемент
jl bolshe; иначе max=matrix[i][j]
mov dx, matrix[bx][si]
mov mas1[di],dx; mas1=max
bolshe: inc si; переходим на сл. столбец (элемент строки)
inc si
loop _mm2; если не конец строки, то заново
pop cx ; востанавливаем количество строк
mov ax, 8 ;
add bx, ax ; переход на через строку матрицы
add bx, ax
mov ax, 4; переход через элемент матрици mas1
add di, ax
loop _mm1 ; если не последняя строка, заново
;2- преобразование одномерной матрици
mov cx, 2 ; количество стОЛБЦОВ
mov di,2
mov si,2
_m_m1: ;
push cx ; сохраняем
mov cx, m ; для того чтобы ввести количество столбцов
mov bx, 0 ; елемент i=0 j=2 делаю минимальным
mov dx, matrix[bx][si] ;
_m_m2:
cmp dx, matrix[bx][si] ;если [i][j]элемент матрицы > max
jg menshe;
mov dx, matrix[bx][si] ;max= matrix[i][j]
menshe: mov ax, 8 ;
add bx, ax ; переход на сл. стобец матрицы
loop _m_m2; если не конец строки, то заново
mov mas1[di],dx; mas1[i]=max i не четное
pop cx ; востанавливаем количество строк
mov ax, 4 ;
add si, ax ; переход на сл. столбец матрицы
mov ax, 4
add di, ax; переход на след елемет+1
loop _m_m1 ; если не последняя строка, заново
;вывод приеобразованной матрици
lea dx, preobr_matrix ; преобразованная матрица -
mov ah, 09h
int 21h
xor si,si
mov cx,4
L: outint mas1[si] ; ФУНКЦИЯ ИЗ МОДУЛЯ IO ДЛЯ ЗНАКОВЫХ ЧИСЕЛ
lea dx, probel ; далее выводим пробел
mov ah, 09h
int 21h
add si, 2
loop L
; =================-=-=-=-=-=-=-=-= sravnenie elementov matrici
xor si,si
mov cx,3
L_1: mov ax,mas1[si]
imul mas1[si+1] ; умножение i го и i+1 элемента
je znak_necher ; если болше 0 и = то два соседних элемента с одним знаком
add si, 2 ; АДРЕСС= АДРЕСС +2
loop L_1
;=--=-=-=-=-=-=-=-=-=-=vivod soobhsenii-=-=--=-=-=--=-=
znak_cher:
lea dx, pustie_str
mov ah, 09h
int 21h
lea dx, zn_chereduetsa ;вывод сообщения о чередовании знаков
mov ah, 09h
int 21h
jmp exit
znak_necher:
lea dx, pustie_str
mov ah, 09h
int 21h
lea dx, zn_nechereduetsa ;вывод сообщения о нечеродовании знаков
mov ah, 09h
int 21h
exit:
mov ah, 7h ; задержка
int 21h
mov ah, 4ch ; выход в DOS
int 21h
end start
ЗаключениеВ данной курсовой работе был изучен теоретический по работе материал с прерываниями DOS, вводом и выводом чисел при помощи подключаемого модуля IO, работы с одномерными и двухмерными массивами, тестирование состояние флагов. Основные принципы и навыки работы с компилятором и отладчиком. Разработана схема алгоритма программы и реализована на языке низкого уровня ассемблер. Список литературыКаган Б. М. Электронные вычислительные машины и системы. Учебное пособие для вузов. - М.: Энергоатомиздат, 1991.
Ефремов В.Д., Мелехин В.Ф., Дурандин К.П. и др. Вычислительные машины и системы. Учебник для вузов - 2М.: Высшая школа, 1994.
Ларионов А.М., Майоров С.А., Новиков Г.И. Вычислительные комплексы, системы, сети.// Учебник для вузов. - Л.: Энергоатомиздат, 1987.
Микропроцессоры: в 3-х кн.: Учебник для вузов. /Под ред. Л.И.Преснухина - М.: Высшая школа, 1986.
МикроЭВМ: в 8 кн. /Под ред. Л..Преснухина. - М.: Высшая школа, 1988.
Соловьев Г.Н. Арифметические устройства ЭВМ. - М.: Энергия, 1978.
Смирнов А.Д Архитектура ВС./ Учебное пособие для вузов. - М.: Наука.: Гл. ред. Физ.-мат.- лит., 1990.
Головкин Б.А. Параллельные вычислительные системы. - М.: Наука: Гл. ред. Физ.-мат. Лит., 1980.
Компьютеры на СБИС в 2-х кн.: пер. с японского/ Т.Мотоока, Х.Тонака и др./ - М.: Мир, 1980.
