cmp al,0
jne Again
cmp ah,3Bh; Pres F1?
je F1
cmp ah,3Ch; Pres F2?
je F2
cmp ah,3Dh; Pres F3?
je F3
cmp ah,3Eh; Pres F4?
je F4
cmp ah,3Fh; Pres F5?
je F5
cmp ah,40h; Pres F6?
je F6
jmp Again
F1:
call EditText
jmp Again
F2:
call changepass
jmp Again
F3:
callconvert
jmp Again
F4:
call clear_screen
jmp Again
F5:
call clear_screen
lea si, About
call print_string
jmp Again
F6:
callreboot_command
hlt
ret
ENDPPresKey
; - --------------------------------------------- -
; +++ 'quit', 'exit', 'reboot' +++
reboot_command:
call clear_screen
leasi, Please
callprint_string
mov ax, 0; wait for any key... .
int 16h
; store magic value at 0040h: 0072h:
; 0000h - cold boot.
; 1234h - warm boot.
; mov ax, 0040h
; mov ds, ax
; mov w. [0072h], 0000h; cold boot.
; jmp 0ffffh: 0000h; reboot!
int 19h
; ++++++++++++++++++++++++++
; - -----------------------------------------------
; print a null terminated string at current cursor position,
; string address: ds: si
print_string proc near
push ax; store registers...
push si;
next_char:
mov al, [si]
cmp al, 0
jz printed
inc si
mov ah, 0eh; teletype function.
int 10h
jmp next_char
printed:
pop si; re-store registers...
pop ax;
ret
print_string endp
; - ----------------------------------------------
EditText proc
push ax
push bx
push cx
push dx
mov ah,13h
xor al,al
xor bx,bx
xor dx,dx
mov cx,menuText_len
mov bl,11
mov bp,offset menuText
mov dl,8
mov dh,18h
int 10h
mov ah,02h
mov bh,0
mov dh,2
mov dl,1
int 10h
AgainTe:
mov ah,00h
int 16h
cmp al,0
jne AgainTe
cmp ah,3Ch; Pres F2?
je F2t
cmp ah,3Dh; Pres F3?
je F3t
cmp ah,3Eh; Pres F4?
je F4t
jmp AgainTe
F2t:
jmp readtext
F3t:
call clear_screen
jmp writetext
F4t:
call clear_screen
jmp the_end
writetext:
mov ah,13h
xor al,al
xor bx,bx
xor dx,dx
mov cx,menuText_len
mov bl,11
mov bp,offset menuText
mov dl,8
mov dh,18h
int 10h
mov ah,02h
mov bh,0
mov dh,2
mov dl,1
int 10h
xor bx,bx
lp:
mov ah,00h
int16h
cmp ah,3Bh
jelC
cmpah,3Eh
jeF4t
mov [Editor + bx], al
movah, 0eh
int10h
incbx
jmplp
lC:
mov ah, 03h
mov al, 1; write 1 sector (512 bytes).
mov cl, sect; sector (1. .18)
mov ch, 11; cylinder (0. .79)
mov dh, head; head (0. .1)
mov dl, drive; always 0 (A:)
mov bx, offset Editor
int 13h
jmp the_end
readtext:
mov ah, 02h
mov al, 1; write 1 sector (512 bytes).
mov cl, sect; sector (1. .18)
mov ch, 11; cylinder (0. .79)
mov dh, head; head (0. .1)
mov dl, drive; always 0 (A:)
mov bx, offset BUFFER
int 13h
mov [BUFFER+512],0
call clear_screen
lea si,BUFFER
call print_string
mov ah,13h
xor al,al
xor bx,bx
xor dx,dx
mov cx,menuText_len
mov bl,11
mov bp,offset menuText
mov dl,8
mov dh,18h
int 10h
mov ah,02h
mov bh,0
mov dh,2
mov dl,1
int 10h
jmp AgainTe
the_end:
pop dx
pop cx
pop bx
pop ax
ret
endp EditText
; - -----------------------------------------------
changepass proc
push ax
push bx
push cx
push si
call clear_screen
lea si,PassMsg
call print_string
xor bx,bx
lpss:
mov ah,00h
int16h
cmpal, 13
jelConv1
mov [Password + bx], al
movah, 0eh
int10h
incbx
jmplpss
lConv1:
call writesec
call readsec; scitivau dlea proverki
lea si,BUFFER
call print_string
pop si
pop cx
pop bx
pop ax
ret
changepass ENDP
; - -----------------------------------------------
writesec proc; zapisivau dannie
push ax
push bx
push cx
push dx
lea si,writ
call print_string
wr: mov ah, 03h
mov al, 1; write 1 sector (512 bytes).
mov cl, sect; sector (1. .18)
mov ch, cyld; cylinder (0. .79)
mov dh, head; head (0. .1)
mov dl, drive; always 0 (A:)
mov bx, offset Password
mov [Password + 6],0; prosto dobavili v konec 0 - dlea correctnogo vivoda na ekran i sravnenia parolei
int 13h
jc er
jmp e2e
er: lea dx, e2
mov ah, 9
int 21h
jmp e2e
e2 db " i/o error... ",0Dh,0Ah,'$'
e2e:
pop dx
pop cx
pop bx
pop ax
ret
ENDP writesec
; - -----------------------------------------------
readsec proc; scitivau dannie
push ax
push bx
push cx
push dx
mov ah, 02h
mov al, 1; write 1 sector (512 bytes).
mov cl, sect; sector (1. .18)
mov ch, cyld; cylinder (0. .79)
mov dh, head; head (0. .1)
mov dl, drive; always 0 (A:)
mov bx, offset BUFFER
int 13h
mov [BUFFER+6],0; prosto dobavili v konec 0 - dlea correctnogo vivoda na ekran i sravnenia parolei
pop dx
pop cx
pop bx
pop ax
ret
ENDP readsec
; - -----------------------------------------------
EnterPassPROC
push ax
push bx
push cx
push si
xorbx, bx
lPass:
mov ah,00h; vvoju paroli
int16h
cmpal, 13
jelCompare
mov [Password + bx], al
movah, 0eh
moval, '*'
int10h
incbx
jmplPass
lCompare:
call readsec
leasi, Password
leadi, BUFFER
cld
movcx, 6
repecmpsb; sravnenie
jnelErr
jmplNext
lErr:; owibka
lea si, ENTERR
call print_string
leasi, ErrPassMsg
callprint_string
call Exit
lNext:; Paroli OK
lea si, ENTERR
call print_string
leasi, OkMsg
callprint_string
pop si
pop cx
pop bx
pop ax
; call PresKey
ret
ENDPEnterPass
; - -----------------------------------------------
; - -----------------------------------------------
convert PROC
push ax
push bx
push cx
push si
CAgain:
call clear_screen
lea si,ConvEnterSy
call print_string
xor bx,bx
mov ah,00h
int 16h
mov dl, al
mov ah, 0eh
int 10h
lConv:
lea si,ConResultA
call print_string
call write_decimal
CheEnter:
mov ah,00h
int 16h
cmp al, 13
je CAgain
cmp al, 1Bh
je ESCB
jmp CheEnter
ESCB:
call clear_screen
call PresKey
pop si
pop cx
pop bx
pop ax
ret
ENDP convert
; - -----------------------------------------------
; - -----------------------------------------------
; clear the screen by scrolling entire screen window,
; and set cursor position on top.
; default attribute is set to white on blue.
clear_screen proc near
push ax; store registers...
push ds;
push bx;
push cx;
push di;
mov ax, 40h
mov ds, ax; for getting screen parameters.
mov ah, 06h; scroll up function id.
mov al, 0; scroll all lines!
mov bh, 10011111b; attribute for new lines.
mov ch, 0; upper row.
mov cl, 0; upper col.
mov di, 84h; rows on screen - 1,mov dh, [di] ; lower row (byte).
mov di, 4ah; columns on screen,
mov dl, [di]
dec dl; lower col.
int 10h
; set cursor position to top
; of the screen:
mov bh, 0; current page.
mov dl, 0; col.
mov dh, 0; row.
mov ah, 02
int 10h
pop di; re-store registers...
pop cx;
pop bx;
pop ds;
pop ax;
mov ah,13h
xor al,al
xor bx,bx
xor dx,dx
mov cx,menu_len
mov bl,11
mov bp,offset menu
mov dl,8
mov dh,18h
int 10h
mov ah,13h
xor al,al
xor bh,bh
mov cx,string_len
mov bl, 19h
mov bp,offset string
mov dl,10
mov dh,0
int 10h
lea si, ENTERR
call print_string
ret
clear_screen endp
; - ------------------------------------------------------
; - -----------------------------------------------
write_decimal proc
push ax
push cx
push dx
push bx
mov ax,dx; (1)
mov bx,10d; (2)
xor cx,cx; (3)
non_zero:
xor dx,dx; (4)
div bx; (5)
push dx; (6)
inc cx; (7)
cmp ax,0; (8)
jne non_zero
write_digit_loop:
pop dx; (9)
call write_hex_digit; (10)
loop write_digit_loop
pop bx
pop dx
pop cx
pop ax
ret
write_decimal endp
WRITE_HEX_DIGIT proc
push DX
xor dh, dh
cmp DL,0Ah
jae HEX_LETTER
add DL,30h
JMP WRITE_DIGIT
HEX_LETTER:
add DL,37h
WRITE_DIGIT:
call WRITE_CHAR
pop DX
ret
WRITE_HEX_DIGIT endp
WRITE_CHAR proc
push AX
push BX
push CX
mov AH,9
xor BH,BH
mov BL,00000111b
mov CX,1
mov AL,DL
int 10h
call CURSOR_RIGHT
pop CX
pop BX
pop AX
ret
WRITE_CHAR endp
CURSOR_RIGHT proc
push DX
call CURSOR_READ
inc DL
call CURSOR_SET
pop DX
ret
CURSOR_RIGHT endp
CURSOR_READ proc
push AX
push BX
push CX
mov AH,3
xor BH,BH
int 10h
pop CX
pop BX
pop AX
ret
CURSOR_READ endp
CURSOR_SET proc
push AX
push BX
push CX
mov AH,2
xor BH,BH
int 10h
pop CX
pop BX
pop AX
ret
CURSOR_SET endp
; - ----------------------------------------------------- -
CSEG ends
end Start
Выводы:
Выполнив данную лабораторную работу, я изучил команды прерывания ввода/вывода биоса. Научился записывать на флоппи диск большое количество данных. Данный курс дал мне основные понятия по операционным системам.
Лабораторный практикум является обязательным компонентом обучения для всех инженерных дисциплин, применяемых в дистанционном обучении. Во время практикума студенты закрепляют теоретические знания практической работой с электронными схемами, учатся работать с контрольно-измерительной аппаратурой, приобретают исследовательские навыки. В связи с динамическим изменением элементной базы электроники, измерительной аппаратуры, электронный практикум должен своевременно обновляться и совершенствоваться. Дело это трудоемкое и достаточно дорогое, особенно в нынешних условиях.
При всех несомненных достоинствах существующего практикума имеется довольно много замечаний, которые в силу объективных и субъективных трудностей практической реализации не решены на сегодня:
Одно из таких направлений рассмотрено в данной работе - использование в лабораторном практикуме компьютерного моделирования на базе программного пакета Emu8086.
Достоинств в этом пакете больше, чем перечислено и о них еще будет говориться в процессе разработки лабораторного практикума. Однако то, что перечислено, позволило выбрать именно Emu8086, как наиболее подходящий для использования в лабораторном практикуме.
До настоящего времени, студенты выполняли лабораторные работы на Лабораторной установке, которая состоит из учебного микропроцессорного комплекта (УМК), выпускаемого рижским заводом "ВЭФ", набора модулей, подключаемых к ее системной шине и различных периферийных устройств УМК представляет собой учебную микро-ЭВМ, предназначенную для изучения программирования, пооектирования и настройки микропроцессорных устройств и систем, выполненных на МП KP580.
Как уже понятно, рижский завод "ВЭФ", уже находиться в другом государстве, морально и физически устарел (уже не выпускается). Микропроцессор МП KP580В уже давно снят с производства, не выпускается, весь мир давно перешел на микропроцессоры фирмы Intel, AMD, Motorolla и т.д.
Последние пять лет - лабораторный практикум выполнялся на эмуляторе МП086, но он был выполнен под операционную систему ДОС, еще современные операционные системы поддерживают эмуляцию ДОС, но следующие ОС перестают поддерживать ДОС.
Поэтому возникла потребность выбора программного продукта, работающего под Windows.
К тому же, необходимой литературы не имелось, нашел ссылки, но они только в общем рассказывают про работу эмулятора Emu8086. Это своего рода - первая работа про данный продукт. Может применяться для проведения лабораторных работ по дисциплине "Основы микропроцессорной техники", "Организация ЭВМ" и т.д.
Представленная работа - это реальный лабораторный практикум для основы работы с микропроцессором, с использованием методов виртуальной электронной лаборатории.
Основные результаты работы следующие:
Методически такая практическая работа прекрасно вписывается в программу курсов, принимаемых в обучении.
Программа имеет интуитивный интерфейс, достаточно проста и практически не требует специального времени на освоение.
Разработан лабораторный практикум, позволяющего быстро освоить работу с программой.
Настоящий лабораторный практикум не является окончательным и закрытым его всегда можно расширить и модифицировать. Для этого не нужны специальные навыки и знания (как например при попытках дополнить программы моделирующие лабораторные работы и написанные на языках программирования) интерфейс Emu8086 прост и выразителен.
Кроме того, тематика лабораторных работ (а возможно и курсовых) выполняемых в этой виртуальной лаборатории может быть очень широка.