Курсовая работа: Разработка программы при помощи языка низкого уровня ассемблер
Если коротко, то язык ассемблера — это символическое представление машинного языка.
Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. Отсюда понятно, что, несмотря на общее название, язык ассемблера для каждого типа компьютера свой. Это касается и внешнего вида программ, написанных на ассемблере, и идей, отражением которых этот язык является.
По-настоящему решить проблемы, связанные с аппаратурой (или даже, более того, зависящие от аппаратуры как, к примеру, повышение быстродействия программы), невозможно без знания ассемблера.
Программист или любой другой пользователь может использовать любые высокоуровневые средства, вплоть до программ построения виртуальных миров и, возможно, даже не подозревать, что на самом деле компьютер выполняет не команды языка, на котором написана его программа, а их трансформированное представление в форме скучной и унылой последовательности команд совсем другого языка — машинного. А теперь представим, что у такого пользователя возникла нестандартная проблема или просто что-то не заладилось. К примеру, его программа должна работать с некоторым необычным устройством или выполнять другие действия, требующие знания принципов работы аппаратуры компьютера. И вот здесь-то и начинается совсем другая история.... Каким бы умным ни был программист, каким бы хорошим ни был язык, на котором он написал свою чудную программу, без знания ассемблера ему не обойтись. И не случайно практически все компиляторы языков высокого уровня содержат средства связи своих модулей с модулями на ассемблере либо поддерживают выход на ассемблерный уровень программирования.
Из всего вышесказанного можно сделать вывод, что, так как язык ассемблера для компьютера “родной”, то и самая эффективная программа может быть написана только на нем (при условии, что ее пишет квалифицированный программист). Здесь есть одно маленькое “но”: это очень трудоемкий, требующий большого внимания и практического опыта процесс. Поэтому реально на ассемблере пишут в основном программы, которые должны обеспечить эффективную работу с аппаратной частью. Иногда на ассемблере пишутся критичные по времени выполнения или расходованию памяти участки программы. Впоследствии они оформляются в виде подпрограмм и совмещаются с кодом на языке высокого уровня.
1. Постановка задачи
В данной курсовой необходимо изучить теоретический материал, разработать алгоритм программы и реализовать его при помощи языка низкого уровня ассемблер. Программа должна выполнять следующие функции:
1 Ввод матрицы 4х4
2 Вывод введенной матрицы
3 Создание одномерного массива (первый элемент – минимальный элемент из строки номер 0, второй – максимальный из столбца номер 1 матрицы, третий – минимальный из строки номер 2 матрицы и т.д.)
4 Тестирование созданного массива (если положительные элементы чередуются то вывод на монитор этого массива, иначе вывод соответствующего сообщения).
2. Описание и схема алгоритма
Рисунок 1 – Алгоритм программы
Рисунок 1 продолжение – Алгоритм программы
Рисунок 1 продолжение – Алгоритм программы
Рисунок 1 продолжение – Алгоритм программы
Рисунок 1 продолжение – Алгоритм программы
Рисунок 1 продолжение – Алгоритм программы
3 Листинг программы
model smallinclude io.asm.dataadd_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.codestart:mov ax, @datamov ds, axmov 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_elemmov ah, 09hint 21hlea dx, pustie_strmov ah, 09hint 21hlea dx, tab ; ??????? ???????? ?? ??. ?????? ??? ???????mov ah, 09hint 21hmov 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, 09hint 21hinc si ; ??????????? ???????? ?? 1inc siloop m2 ; ???? ?? ?????, ?????? ?????? ?? ??????????? ?.?. ?????? ??????pop cx ; ?????????????? ?????????? ?????mov ax, m ; ? al <- ?????? ??????add bx, ax ; bx=bx+ax (????????? ???????? ?? ??. ??????)add bx, axlea dx, tab ; ??????? ???????? ?? ??. ?????? ??? ???????mov ah, 09hint 21newlineloop 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, 09hint 21hlea dx, tab ; ??????? ?? ????? ????????mov ah, 09hint 21hmov cx, m ; ?????????? ?????mov bx, 0 ; ????? ??????_m1: ;push cx ; ?????????mov cx, m ; ??? ???? ????? ?????? ?????????? ????????mov si, 0 ; ????? ???????_m2:outint matrix[bx][si] ; ??????? ??????? ???????lea dx, probel ; ????? ??????? ??????mov ah, 09hint 21hinc si; ????????? ?? ??. ??????? (??????? ??????)inc siloop _m2 ; ???? ?? ????? ??????, ?? ??????pop cx ; ?????????????? ?????????? ?????mov ax, m ;add bx, ax ; ??????? ?? ??. ?????? ???????add bx, axlea dx, tab ; ??????? ?? ????? ????????mov ah, 09hint 21hloop _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=maxbolshe: inc si; ????????? ?? ??. ??????? (??????? ??????)inc siloop _mm2; ???? ?? ????? ??????, ?? ??????pop cx ; ?????????????? ?????????? ?????mov ax, 8 ;add bx, ax ; ??????? ?? ????? ?????? ???????add bx, axmov ax, 4; ??????? ????? ??????? ??????? mas1add di, axloop _mm1 ; ???? ?? ????????? ??????, ??????;2- ?????????????? ?????????? ???????mov cx, 2 ; ?????????? ????????mov di,2mov 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]??????? ??????? > maxjg 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, 4add di, ax; ??????? ?? ???? ??????+1loop _m_m1 ; ???? ?? ????????? ??????, ??????;????? ???????????????? ???????lea dx, preobr_matrix ; ??????????????? ??????? -mov ah, 09hint 21hxor si,simov cx,4L: outint mas1[si] ; ??????? ?? ?????? IO ??? ???????? ?????lea dx, probel ; ????? ??????? ??????mov ah, 09hint 21hadd si, 2loop L; =================-=-=-=-=-=-=-=-= sravnenie elementov matricixor si,simov cx,3L_1: mov ax,mas1[si]imul mas1[si+1] ; ????????? i ?? ? i+1 ????????je znak_necher ; ???? ????? 0 ? = ?? ??? ???????? ???????? ? ????? ??????add si, 2 ; ??????= ?????? +2loop L_1;=--=-=-=-=-=-=-=-=-=-=vivod soobhsenii-=-=--=-=-=--=-=znak_cher:lea dx, pustie_strmov ah, 09hint 21hlea dx, zn_chereduetsa ;????? ????????? ? ??????????? ??????mov ah, 09hint 21hjmp exitznak_necher:lea dx, pustie_strmov ah, 09hint 21hlea dx, zn_nechereduetsa ;????? ????????? ? ????????????? ??????mov ah, 09hint 21hexit:mov ah, 7h ; ????????int 21hmov ah, 4ch ; ????? ? DOSint 21hend startЗаключение
В данной курсовой работе был изучен теоретический по работе материал с прерываниями DOS, вводом и выводом чисел при помощи подключаемого модуля IO, работы с одномерными и двухмерными массивами, тестирование состояние флагов. Основные принципы и навыки работы с компилятором и отладчиком. Разработана схема алгоритма программы и реализована на языке низкого уровня ассемблер.
Список литературы
1. Каган Б. М. Электронные вычислительные машины и системы. Учебное пособие для вузов. – М.: Энергоатомиздат, 1991.
2. Ефремов В.Д., Мелехин В.Ф., Дурандин К.П. и др. Вычислительные машины и системы. Учебник для вузов – 2М.: Высшая школа, 1994.
3. Ларионов А.М., Майоров С.А., Новиков Г.И. Вычислительные комплексы, системы, сети.// Учебник для вузов. – Л.: Энергоатомиздат, 1987.
4. Микропроцессоры: в 3-х кн.: Учебник для вузов. /Под ред. Л.И.Преснухина - М.: Высшая школа, 1986.
5. МикроЭВМ: в 8 кн. /Под ред. Л.. Преснухина. – М.: Высшая школа, 1988.
6. Соловьев Г.Н. Арифметические устройства ЭВМ. – М.: Энергия, 1978.
7. Смирнов А.Д Архитектура ВС./ Учебное пособие для вузов. – М.: Наука.: Гл. ред. Физ.-мат.- лит., 1990.
8. Головкин Б.А. Параллельные вычислительные системы. – М.: Наука: Гл. ред. Физ.-мат. Лит., 1980.
9. Компьютеры на СБИС в 2-х кн.: пер. с японского/ Т.Мотоока, Х.Тонака и др./ - М.: Мир, 1980.