Тема: Исследование системы прерываний 16-разрядного МП
Содержание:
Цели работы:
1.Изучить систему прерываний МП фирмы Intel
2.Изучить основные функции прерываний BIOS (10h) и DOS (21h)
3.Набрать программу WWYDS.ASM,получить EXE-файл и проверить ее работоспособность
4.Исследовать подпрограмму WWOD ввода символов с клавиатуры в память с индикацией их на экране
5.Исследовать макроопределение WYD вывода на экран 16-разрядных двоичных чисел
Основные положения для отработки на занятии
-------------------------------------------
1. Назначение системы прерываний,структура системы прерываний на базе МП фирмы Intel
2. Основные функции прерывания BIOS 10h,которые предназначены для управления монитором:
02h - установка курсора в требуемое место экрана
03h - определение положения курсора на экране
06h - прокрутка окна вверх
07h - прокрутка окна вниз
08h - чтение в текущем месте экрана символа и его
атрибута
0ah - вставка в текущее место экрана символ с его
атрибутом
0fh - прочитать параметры текущего видеорежима
3. Основные функции прерывания DOS 21h,которые предоставляют не которые услуги пользователю со стороны операционной системы:
01h - ввод символа с эхо на экране
02h - вывод символа на экран
05h - вывод символа на принтер
09h - вывод строки символов на экран
0ah - ввод строки символов с клавиатуры ?
3fh - ввод строки символов с клавиатуры
4. Изучить последовательность действий пользователя при использовании прерываний:
- поместить номер функции (они указаны в пп.2,3) в регистр AH
- поместить передаваемые параметры для функции
в заранее определенные системой регистры
- вызвать прерывание ассемблерными командами INT 10h или INT 21h
- извлечь результаты из определенных регистров
5. Получить ЕХЕ-файл программы с названием WWYDS.ASM и проверить его работу по вводу с клавиатуры символов(которые затем пре образуются в 16-разрядные двоичные числа) и выводу этих чисел на экран.
С Т Р О Г О С О Б Л Ю Д А Т Ь ПРАВИЛА
------------------------------------
следующие правила при работе с программой:
------------------------------------------
а). вводить только положительные 5-разрядные десятичные числа без знака в диапазоне
00000 - 65535
б). незначащие нули в начале числа вводить обязательно.
в). при отладке с помощью AFDPRO.EXE(или AFD.EXE) для пошагового исполнения команд INT следует использовать клавишу F2 (т.к. команда представляет собой процедуру).
Несоблюдение этих правил может привести к неверным результатам!
--------------------
; Программа с макроопределением вывода 16-разрядных чисел
; в 16-й системе счисления и подпрограммой ввода 5-разрядных
; десятичных чисел (файл wdwh.asm).
;----------------------------------------------------------------
.model small
;----------------------------------------------------------------
; Макроопределение вывода на экран слов в 16-й системе :
;----------------------------------------------------------------
wyh macro wt ; wt - слово в памяти или константа
local m10
push ax
push bx
push cx
push dx
push di
push bp
;...............................
mov
mov
mov
mov
;...............................
m10: mov
and
mov
shr
dec
shl
;...............................
shr
;...............................
xlat
mov
mov
;...............................
mov ah,02h
int 21h
;...............................
dec di
dec di
cmp di,0
jnz m10
;...............................
mov dx,offset spc
mov ah,9
int 21h
;...............................
pop bp
pop di
pop dx
pop cx
pop bx
pop ax
;..........................................................
endm ; Конец макроопределения
;----------------------------------------------------------
.stack ; Сегмент стека
;---------------------------------------------------------
.data? ; Сегмент данных
z dw ? ; (неопределенные данные)
x db 8 dup(?)
;----------------------------------------------------------
.data ; (определенные данные)
spc db 10,13,'$' ; управляющие символы
; перевод строки 10
; возврат каретки 13
; конец текстовой строки $
;.......................................
cw dw 0,000fh,00f0h ; константы для выреза-
dw 0f00h,0f000h ; ния 4-битных кодов
;.......................................
tab db 30h,31h,32h,33h ; символы
db 34h,35h,36h,37h ; цифр
db 38h,39h,41h,42h ; шестнадцатиричной
db 43h,44h,45h,46h ; системы счисления
; ......................................
ct dw 10000 ; веса разрядов
dw 1000 ; 5-ти разрядных
dw 100 ; десятичных
dw 10 ; чисел
dw 1 ;
;----------------------------------------------------------
.code ; Сегмент кода(программа)
;__________________________________________________________
; Подпрограмма ввода с клавиатуры строки из 5 символов :
; Используются символы только десятичных цифр 0,1,2,..,9 :
;__________________________________________________________
wwod: push bx
push cx
push dx
push si
push di
mov ah,3fh
mov bx,00
mov cx,08h
mov dx,offset x
int 21h
mov bx,0
mov cx,5
mov si,offset ct
mov di,offset x
m1: mov al,[di]
and al,0fh
mov ah,0
mul word ptr [si]
add bx,ax
inc di
add si,2
loop m1
mov z,bx
pop di
pop si
pop dx
pop cx
pop bx
ret
;......................................................
.startup ; Точка входа в программу
call wwod
wyh z
.exit
;......................................................
end
Программа WWDS.ASM
---------------------
; Программа ввода с клавиатуры 5-разрядных десятичных чисел
; и вывода на экран слов в двоичной системе
;----------------------------------------------------------
.model small
.stack
;------------------------------------
.data?
z dw ?
x db 8 dup(?)
;------------------------------------
.data
spc db 10,13,'$'
ct dw 10000
dw 1000
dw 100
dw 10
dw 1
;----------------------------------------------------------
; Макроопределение вывода двоичных слов на экран :
;----------------------------------------------------------
wyd macro wt ; слово в памяти или константа
local m11,m12
push ax
push cx
push dx
;....................................
mov cx,8000h
mov ax,wt
;....................................
m11: push ax
mov dx,'1'
test ax,cx
jnz m12
mov dx,'0'
;....................................
m12: mov ah,2h
int 21h
;....................................
pop ax
shr cx,1
jnz m11
;....................................
mov dx,offset spc
mov ah,9
int 21h
;....................................
pop dx
pop cx
pop ax
;....................................
endm
;----------------------------------------------------------
.code ; Начало кодового сегмента
;----------------------------------------------------------
; Подпрограмма ввода с клавиатуры строки символов :
;----------------------------------------------------------
wwod: push bx
push cx
push dx
mov ah,3fh
mov bx,00
mov cx,08h
mov dx,offset x
int 21h
pop dx
pop cx
pop bx
ret
;....................................
.startup
;....................................
call wwod
mov dx,0
mov bx,0
mov cx,5
mov si,offset ct
mov di,offset x
m1: mov al,[di]
and al,0fh
mov ah,0
mul word ptr [si]
add bx,ax
inc di
add si,2
loop m1
mov z,bx
wyd z
.exit
;....................................
end
Вывод на печатающее устройство
;.........................................................
; Программа вывода на принтер двоичного числа
; с макроопределением PRNT
;.........................................................
.model small
.stack
.data
x db 20
y db 30
z db 0
text db 'z=........'
db 0dh,0ah
;...Макроопределение вывода на принтер....................
prnt macro mas ; заголовок макроопределения
mov ah,40h ; функция вывода строки
mov bx,04 ; номер устройства вывода
mov cx,12 ; количество выводимых символов
lea dx,mas ; начальный адрес выводимой строки
int 21h ; команда прерывания DOS
endm ; конец макроопределения
;.........................................................
;....Начало программного(кодового) сегмента..... .........
.code
.startup ; точка входа в программу
mov al,x
add al,y
mov z,al
lea bx,text+2
call zbyte
prnt text
.exit ; точка выхода в DOS
;....Подпрограмма формирования двоичных цифр..............
zbyte: mov cx,8
m1: rol al,1
mov byte ptr[bx],30h
jnc m2
mov byte ptr[bx],31h
m2: inc bx
loop m1
ret ; конец подпрограммы
;..............Конец программы............................
end
|
||||
|
||||
|
||||
|
||||
|