Язык Ассемблер

Автор: Пользователь скрыл имя, 25 Января 2012 в 12:40, курсовая работа

Описание работы

Целью данного курсового проекта является углубление и закрепление знаний, полученных по дисциплине «Системное программное обеспечение», формирование опыта создания прикладных программ с использованием программного продукта Turbo Assembler, а также изучение системных функций DOS и BIOS и рассмотрение механизма работы их прерываний.

Содержание

Введение 4
1 Теоретическая часть 5
1.1 Язык Ассемблер 5
1.2 Достоинства языка Ассемблер 6
1.3 Недостатки языка Ассемблер 7
1.4 Стек 8
1.5 Система прерываний 10
1.6 Макрокоманды 14
1.7 Этапы разработки программы 16
2 Практическая часть 18
2.1 Постановка задачи 18
2.2 Назначение программы 18
2.3 Наименование программы 18
2.4 Требования к программному обеспечению 18
2.5 Описание структуры программы 18
3 Структура программы 19
4 Используемые технические средства 21
5 Запуск программы 22
Заключение 23
Список использованной литературы

Работа содержит 1 файл

ПЗ_СПО_Родионова_нк.doc

— 293.00 Кб (Скачать)

 

Приложение А

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

 

; timer.asm

; демонстрация  перехвата прерывания системного  таймера: вывод текущего времени 

; в левом углу  экрана

 

      .model tiny

      .code

      .186   ; для pusha/popa и сдвигов

      org 100h

start proc near                  ;точка входа в программу

; сохранить адрес  предыдущего обработчика прерывания 1Ch

      mov ax,351Ch ; AH = 35h, AL = номер прерывания

      int 21h  ; функция DOS: определить адрес обработчика

      mov word ptr old_int1Ch,bx  ; прерывания

      mov word ptr old_int1Ch+2,es ; (возвращается в ES:BX)

; установить  наш обработчик

      mov ax,251Ch ; AH = 25h, AL = номер прерывания

      mov dx,offset int1Ch_handler ; DS:DX - адрес обработчика

      int 21h  ; установить обработчик прерывания 1Ch

 

; здесь размещается  собственно программа, например  вызов programma.com

      mov ah,1                        

      int 21h  ; ожидание нажатия на любую клавишу

; конец программы

 

; восстановить  предыдущий обработчик прерывания 1Сh

      mov ax,251Ch  ; AH = 25h, AL = номер прерывания

      mov dx,word ptr old_int1Ch+2

      mov ds,dx

      mov dx,word ptr cs:old_int1Ch ; DS:DX - адрес обработчика

      int 21h

      ret

old_int1Ch dd ? ; здесь хранится адрес предыдущего обработчика

start_position dw 0 ; позиция на экране, в которую выводится текущее время

start endp

 

; обработчик  для прерывания 1Ch

; выводит текущее  время в позицию start_position на экране (только в текстовом

; режиме)

int1Ch_handler proc far

      pusha  ; обработчик аппаратного прерывания

      push es ; должен сохранять ВСЕ регистры

      push ds

      push cs ; на входе в обработчик известно только значение

      pop ds ; регистра CS

      mov ah,02h ; Функция 02h прерывания 1Ah:

      int 1Ah  ; чтение времени из RTC

      jc exit_handler     ; если часы заняты - в другой раз

; AL = час в BCD-формате

      call bcd2asc ; преобразовать в ASCII

      mov byte ptr output_line[2],ah ; поместить их в

      mov byte ptr output_line[4],al ; строку output_line

 

      mov al,cl  ; CL = минута в BCD-формате

      call bcd2asc

      mov byte ptr output_line[10],ah

      mov byte ptr output_line[12],al

 

      mov al,dh  ; DH = секунда в BCD-формате

      call bcd2asc

      mov byte ptr output_line[16],ah

      mov byte ptr output_line[18],al

 

      mov cx,output_line_l ; число байтов в строке - в CX

      push 0B800h

      pop es   ; адрес в видеопамяти

      mov di,word ptr start_position ; в ES:DI

      mov si,offset output_line ; адрес строки в DS:SI

      cld

      rep movsb   ; скопировать строку

exit_handler:

      pop ds  ; восстановить все регистры

      pop es

      popa

      jmp cs:old_int1Ch ; передать управление предыдущему

                        ; обработчику

 
 

; процедура bcd2asc

; преобразует  старшую цифру упакованного BCD-числа в AL в ASCII-символ в AH,

; а младшую  цифру - в ASCII-символ в AL

bcd2asc  proc near

      mov ah,al

      and al,0Fh ; оставить младшие 4 бита в AL

      shr ah,4  ; сдвинуть старшие 4 бита в AH

      or ax,3030h ; преобразовать BCD в ASCII-символы

      ret

bcd2asc  endp

 

; строка " 00h 00:00" с атрибутом 1Fh (белый на синем) после каждого символа

output_line db ' ',1Fh,'0',1Fh,'0',1Fh,'h',1Fh

            db ' ',1Fh,'0',1Fh,'0',1Fh,':',1Fh

            db '0',1Fh,'0',1Fh,' ',1Fh

output_line_l equ $-output_line

 

int1Ch_handler endp

 

end start

Информация о работе Язык Ассемблер