Смекни!
smekni.com

Разработка виртуальных лабораторных работ средствами эмулятора Emu8086 (стр. 20 из 21)

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 прост и выразителен.

Кроме того, тематика лабораторных работ (а возможно и курсовых) выполняемых в этой виртуальной лаборатории может быть очень широка.