Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 08:44, курсовая работа
Распространение процессоров выявило необходимость изучения языка Ассемблер для написания программ для персональных ЭВМ из-за двух причин. Во-первых, программы, написанные на языке Ассемблер, требуют значительно меньшего объема памяти и ресурсов компьютера. Во-вторых, знание языка Ассемблер и машинного кода дает понимание архитектуры машины. А знание архитектуры машины и принципов ее работы дает возможность усовершенствовать написанные программы и повысить их быстродействие за счет применения некоторых специальных методов программирования.
1 Введение……………………………………………………………………..4
2 Постановка задачи……………………………………………………….….6
3 Метод решения задачи……………………………………………………...8
4 Разработка состава исходных, промежуточных и
выходных данных………………………………………………………………9
5 Разработка алгоритма решения задачи…………………………………..10
6 Описание программы…………………………………………………......11
7 Отладка программы……………………………………………………….12
8 Описание языка программирования……………………………………..13
9 Руководство системного программиста…………………………………16
10 Руководство оператора…………………………………………………...21
11 Заключение………………………………………………………………..22
12 Список литературы……………………………………………………….23
Приложение А
Схема данных………………………………………………………………..26
Приложение Б
Схема программы……………………………………………………………27
Приложение В
Текст программы…………………………………………………………….29
Приложение С
Пример выполнения………………………………………………………....36
mov BH,0 ;переносим в регистр BH 0
int 10h ;прерывание BIOS
ret ;выход из процедуры
cursor endp
3. Процедура вывода:
oput proc
;процедура вывода
mov AH,09h ;переносим в регистр AH 09h
int 21h
;прерывание DOS
ret
;выход из процедуры
oput endp
4. Процедура перевода введённого значения с клавиатуры.
cod proc ;процедура перевода введённого значения с клавиатуры
;в соответствующий ей по
;для удобства вычислений (см. таб. ASCII)
xor ax,ax ;обнуление регистра AX
mov cods,ax ;чистим переменную decods
mov cx,10 ;заносим в регистр CX значение 10
cd: mov al,[si+bx] ;выбор ASCII - символа
and AX,000fh ;удаление 3 (AL&0Fh)
mul mn ;умножение на множитель для преобразования
add cods,ax ;добавление к полученному результату
mov ax,mn ;вычисление следующего значения множителя
mul cx ;умножение AX на CX
mov mn,ax ;запись в переменную mn значения AX
dec bx ;если не последняя цифра, то - продолжать
jnz cd ;переход по метке cd если не ноль
xor ax,ax ;обнуление регистра AX
mov ax,mn ;записываем в регистр множитель
mov mn,1 ;записываем 1 в переменную mn
ret ;выход из процедуры
cod endp ;результат после выхода из процедуры в cods
5. Процедура ввода:
inp proc ;процедура ввода
mov AH,0ah ;переносим в регистр AH 0ah
int 21h
;прерывание DOS
ret ;выход из процедуры
inp endp
6. Процедура вывода значения функции и увеличения x на h.
zf proc
mov dx,cur
;устанавливаем координаты
call cursor ;вызов процедуры установки курсора
lea dx,t13 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov ax,rezf ;записываем в ax результат функции
call decod ;вызов процедуры обратного перевода
mov ax,cur ;записываем в ах координаты курсора
add ax,0015h ;смещаем в право на 15
mov cuy,ax ;сохраняем новое значение курсора для вывода значения функции
mov dx,cuy ;записываем в dх координаты курсора
call cursor ;вызов процедуры установки курсора
lea dx,ascii ;заносим в dx адрес значения функции
call oput ;вызываем процедуру вывода
mov cuy,0 ;обнуляем значение курсора для вывода значения функции
mov ax,xni ;значение x
add ax,hk ;x+h
mov xni,ax ;сохраняем новое значение x
ret
zf endp
7. Процедура обратного перевода.
decod proc
;процедура перевода
;символах кода ASCII,
;в форму приемлемую для вывода (в виде чисел)
mov ascii,0 ;записываем 0 в переменную asc
mov cx,10 ;заносим в регистр CX значение 10
lea si,ascii+4 ;заносим
в регистр si значение asc смещенное на 4
dcd2: cmp ax,10 ;сравниваем значение в регистре AX с 10
jb dcd1 ;если в АХ число меньше 10, то - выход
xor dx,dx ;обнуление
div cx ;деление содержимого AX на 10; остаток - в DL
or dl,30h ;формирование кода ASCII очередной цифры
mov [si],dl ;сохранение ASCII - символа
dec si ;декремент si-1
jmp dcd2 ;переход на dcd2
dcd1: or al,30h ;формирование кода ASCII последней (старшей) цифры
mov [si],al ;сохранение ASCII - символа
ret ;выход из процедуры
decod endp
8. Процедура обработки ошибки
error proc ;ошибка при делении на 0
mov dx,0D00h ;указываем координаты курсора
call cursor ;вызов процедуры установки курсора
lea dx,t14 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov ah,0ah ;считываем ввод
lea dx,pause ;записываем в регистр
int 21h
jmp exit
ret
error endp
10 Руководство оператора
Программа состоит из запускного KR.COM файла, в дистрибутив также включены файлы TASM.EXE, TD.EXE, TLINK.EXE, KR.asm и поставляется на любом носителе. Также идет исходный текст программы, который можно скомпилировать в тот же com файл.
Делается это так : набирается в командной строке
tasm.exe KR.asm /w0 /m9
tlink.exe KR.obj /t
Результатом работы данных программ является запускной com файл KR.COM.
Для запуска программы необходимо нажать ENTER на файле KR.COM.
Результатом выполнения программы будет:
Вывод текстового сообщения
об авторах программы, и реализуемой
с помощью нее функции, а также
предложение о вводе
11 Заключение
Итогом данной курсовой работы стала программа вычисления специальной функции. Программа соответствует всем требованиям, предъявленным в данном курсовом проектировании.
12 Список литературы
1. Абель П. Язык программирования для IBM PC и программирования.-
М.: Выс. шк., 1992.
2. Бек Л. Введение в системное программирование. - М.: Мир, 1988.
3. Бредли Л. Программирование на языке ассемблера для ПЭВМ фирмы
IBM. - М.: Радио и связь, 1988.
4. Брябрин В.М. Программное обеспечение ПЭВМ. - М.: Наука, 1988.
5. ГОСТ 2.104-68. ЕСКД. Основные надписи.
6. ГОСТ 2.105-79. ЕСКД. Общие требования к текстовым документам.
7. ГОСТ 2.106-68. ЕСКД. Текстовые документы.
8. ГОСТ 2.301-68. ЕСКД. Форматы.
9. ГОСТ 2.303-68. ЕСКД. Линии.
10. ГОСТ 2.304-68. ЕСКД. Шрифты чертежные.
11. ГОСТ 19.101-77. ЕСПД. Виды программ и программных документов.
12. ГОСТ 19.103-77. ЕСПД. Обозначения программ и программных до-
кументов.
13. ГОСТ 19.105-78. ЕСПД. Общие требования к программным докумен-
там.
14. ГОСТ 19.401-78. ЕСПД. Текст программы.
15. ГОСТ 19.402-78. ЕСПД. Описание программы.
16. ГОСТ 19.502-78. ЕСПД. Описание применения.
17. ГОСТ 19.503-79. ЕСПД. Руководство системного программиста.
18. ГОСТ 19.504-79. ЕСПД. Руководство программиста.
19. ГОСТ 19.505-79. ЕСПД. Руководство оператора.
20. ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и
систем. Условные
обозначения и правила
во стандартов, 1991.
21. Грис Д. Конструирование компиляторов для ЦВМ. - М.: Мир,
1975.
22. Дао
Л. Программирование
1988.
23. Джордейн
Р. Справочник программиста
типа IBM PC, XT и AT.- М.: Финансы и статистика, 1991.
24. Зуев Е.А. Язык программирования Turbo Pascal 6.0. - М.: Уни-
тех, 1992.
25. Йенсен К., Вирт Н. Паскаль: руководство для пользователя. -
М.: Финансы и статистика, 1989.
26. Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы
проектирования компиляторов. - М.: Мир, 1980.
27. Лю Ю-Чжен, Гибсон г. Архитектура, программирование и проек-
тирование микрокомпьютерных систем. - М.: Радио и связь, 1987.
28. Нортон П. Персональный компьютер фирмы IBM и операционная
система MS DOS. - М,: Радио и связь, 1991.
29. Нортон П. Справочное руководство по MS DOS. - М.: Радио и
связь, 1992.
30. РД40.РСФСР-050-87. Проекты (работы) дипломные и курсовые.
Правила оформления.
Руководящий нормативный
31. Скляров В.А. Применение ПЭВМ. В 3 кн. Кн.1. Организация и уп-
равление ресурсами ПЭВМ. Кн.2. Операционные системы ПЭВМ : Практич.
пособие. - М.: Выс. шк., 1992.
32. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на
языке ассемблера. - М.: Радио и связь, 1991.
33. Фигурнов В.Э. IBM PC для пользователя. - м: Финансы и ста-
тистика, 1991.
34. Хершель Р. Turbo Pascal 4.0/5.0. - Вологда: МИК, 1991.
35. Чижов
А.А. Системные программные
36. Шнайдер А. Язык ассемблера для персонального компьютера
фирмы IBM. - М.: Мир, 1988.
Приложение А. Схема данных
Переменная |
Тип данных |
Назначение |
t0 |
DB |
Содержит текстовое сообщение |
t1 |
DB |
Содержит текстовое сообщение |
t2 |
DB |
Содержит текстовое сообщение |
t3 |
DB |
Содержит текстовое сообщение |
t4 |
DB |
Содержит текстовое сообщение |
t5 |
DB |
Содержит текстовое сообщение |
t6 |
DB |
Содержит текстовое сообщение |
t7 |
DB |
Содержит текстовое сообщение |
t8 |
DB |
Содержит текстовое сообщение |
t9 |
DB |
Содержит текстовое сообщение |
t10 |
DB |
Содержит текстовое сообщение |
t11 |
DB |
Содержит текстовое сообщение |
t12 |
DB |
Содержит текстовое сообщение |
t13 |
DB |
Содержит текстовое сообщение |
t14 |
DB |
Содержит текстовое сообщение |
t15 |
DB |
Содержит текстовое сообщение |
t16 |
DB |
Содержит текстовое сообщение |
A |
DB |
Хранение значения A введённое с клавиатуры |
B |
DB |
Хранение значения B введённое с клавиатуры |
C |
DB |
Хранение значения C введённое с клавиатуры |
Y |
DB |
Хранение значения Y введённое с клавиатуры |
X1 |
DB |
Хранение значения X1 введённое с клавиатуры |
Xn |
DB |
Хранение значения Xn введённое с клавиатуры |
h |
DB |
Хранение значения h введённое с клавиатуры |
pause |
DB |
Хранение значения stp введённое с клавиатуры |
ascii |
DW |
Память для ASCII-кодов |
cur |
DW |
Хранение координат курсора вывода сообщения |
cuy |
DW |
Хранение координат курсора вывода результата |
rezf |
DW |
Хранение результата функции |
rez1 |
DW |
Хранение промежуточных результатов |
rez2 |
DW |
Хранение промежуточных результатов |
rez3 |
DW |
Хранение промежуточных результатов |
rez4 |
DW |
Хранение промежуточных результатов |
rez5 |
DW |
Хранение промежуточных результатов |
rez6 |
DW |
Хранение промежуточных результатов |
rez7 |
DW |
Хранение промежуточных результатов |
Ak |
DW |
Хранение переведённого значения A |
Bk |
DW |
Хранение переведённого значения B |
Ck |
DW |
Хранение переведённого значения C |
Yk |
DW |
Хранение переведённого значения y |
X1k |
DW |
Хранение переведённого значения x1 |
Xnk |
DW |
Хранение переведённого значения xn |
Xni |
DW |
Хранение временного значения х |
hk |
DW |
Хранение переведённого значения шага h |
mn |
DW |
Константа равная 1 (множитель для перевода) |
cods |
DW |
Хранение переведённого значения |
Приложение Б. Схема программы
Блок-схема вычисления значения функции
Приложение В. Текст программы.
CODE SEGMENT ;начало сегмента кода
ORG 100h
start proc
ASSUME cs:code ;директива установки сегмента кода
begin:
call clear
;вызов процедуры очистки
mov dx,0000h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t0 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0100h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t1 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0200h ;записываем в dх координаты курсора
call cursor ;вызов процедуры установки курсора
lea dx,t2 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0320h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t3 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0420h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t4 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0520h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t5 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
mov dx,0600h ;записываем в dх координаты курсора
call cursor
;вызов процедуры установки
lea dx,t6 ;указываем ссылку на сообщение
call oput ;вызываем процедуру вывода
;Ввод значения А
mov dx,0600h ;координаты курсора
call cursor ;вызов процедуры
lea dx,t7 ;загружаем подсказку
call oput ;выводим на экран
mov ah,0ah ;считываем ввод
lea dx,A ;записываем в регистр
int 21h ;прерывание DOS
mov bl,A+1 ;в bl записываем значение A со смещением на 1
lea si,A+1 ;в si записываем значение A со смещением на 1
call cod ;вызываем процедуру перевода
sub ax,ax ;чистим регистр
mov ax,cods ;пишем в ax введённое значение
mov Ak,ax ;записываем переведённое значение
;Ввод значения B
mov dx,0700h ;координаты курсора
call cursor ;вызов процедуры
lea dx,t8 ;загружаем подсказку
call oput ;выводим на экран
mov ah,0ah ;считываем ввод
lea dx,B ;записываем в регистр
int 21h ;прерывание DOS
mov bl,B+1 ;в bl записываем значение B со смещением на 1
lea si,B+1 ;в si записываем значение B со смещением на 1