48552 (588566), страница 16

Файл №588566 48552 (Разработка виртуальных лабораторных работ средствами эмулятора Emu8086) 16 страница48552 (588566) страница 162016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 16)

CSEG segment

assume cs: CSEG, ds: CSEG, es: CSEG, ss: CSEG

; - --------------------------------------------- -

Start:

jmp EndData

mes1DB13,10,' Pres ', 0Dh,0Ah,0

mes2DB13,10,' Pres ', 0Dh,0Ah,0

mes3DB13,10,' Pres ', 0Dh,0Ah,0

mes5DB13,10,' Pres ', 0Dh,0Ah,0

mes6DB13,10,' Pres ', 0Dh,0Ah,0

string db " Operatsionnaea Sisteam studenta Macarova Anatoliea, grupa TI-065"

string_len equ $-string

menu DB"F1 Help F2 Command F3 Calculator F4 ClearScreen F5 About F6 Exit"

menu_len equ $-menu

EndData:

mov ax,cs

mov es,ax

mov ds,ax

xor di,di

xor si,si

xor dx,dx

xor bx,bx

xor cx,cx

mov ss,ax

mov sp,0FFFEh

call clear_screen

call PresKey

Exit:

mov ah,00h

int 16h

hlt

; - -----------------------------------------------

PresKeyPROC

Again:

mov ah,00h

int 16h

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:

leasi, mes1

callprint_string

jmp Again

F2:

leasi, mes2

callprint_string

jmp Again

F3:

leasi, mes3

callprint_string

jmp Again

F4:

call clear_screen

jmp Again

F5:

leasi, mes5

callprint_string

jmp Again

F6:

leasi, mes6

callprint_string

hlt

ret

ENDPPresKey

; 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

; 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,10

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

ret

clear_screen endp

CSEG ends

end Start

Выводы:

Данное меню выполнено на простом выводе на экран teletype. При использование меню происходит постоянное обновление, предотвращая сдвига верхней и нижней строки. Каждая клавиша выводит на экран сообщение о нажатой клавише. Строки меню выводятся по определенным координатам и окрашены особенным цветом.

Лабораторная работа № 3.

Окна операционной системы, реализация меню

Цель работы: Создать окна для операционной системы и перехват нажатия клавиш для меню и их реализация.

Задание: Создать окна для операционной системы, для примера окно About, так же произвести перезагрузку компьютера, задействуя кнопку F6.

Новые добавления:

В Data segment определяю значение, которые будут использованы для отображения меню: Нижнее главное меню и верхнее название ОС. Так же и для окна About, которое уже составлено в этом значение из символов. Данное окно и меню будет прорисовываться посимвольно с помощью процедуры print_string.

string db " Operatsionnaea Sistema studenta Macarova Anatoliea, grupa TI-065"

string_len equ $-string

menuText DB"F1 Save F2 Read F3 New Write F4 Close "

menuText_len equ $-menuText

menu DB"F1 Bloknot F2 Change PAss F3 Convertor F4 ClearScreen F5 About F6 Exit"

menu_len equ $-menu

About DB 13,10

db ' +------------------------------------------------+', 0Dh,0Ah

db ' |XXXXXXXXXXXXXXXX About Makar OS XXXXXXXXXXXXXXXX|', 0Dh,0Ah

db ' +------------------------------------------------|', 0Dh,0Ah

db ' | |', 0Dh,0Ah

db ' | +----------------------------------------+ |', 0Dh,0Ah

db ' | | | |', 0Dh,0Ah

db ' | | @@@@ Makar OS A 1.5 | |', 0Dh,0Ah

db ' | | @@@@ | |', 0Dh,0Ah

db ' | | Copiright (C) 2008 | |', 0Dh,0Ah

db ' | | Author Macarov Anatoli TI-065 | |', 0Dh,0Ah

db ' | | All Rights Reserved | |', 0Dh,0Ah

db ' | +----------------------------------------+ |', 0Dh,0Ah

db ' | |', 0Dh,0Ah

db ' | +-----------+ |', 0Dh,0Ah

db ' | |####OK#####| |', 0Dh,0Ah

db ' | +-----------+ |', 0Dh,0Ah

db ' +------------------------------------------------+', 0Dh,0Ah,0

About_len equ $-About

Процедура print_string обеспечивает посимвольный вывод. Передача в регистр 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

Данный код программы реализует перезагрузку ОС, для активации необходимо нажать F6. После этого последует сообщение о том, что надо вытащить флоппи дискету и нажать любую кнопку и тогда произойдет перезагрузка.

; +++ '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

Выводы:

Выполнив данную лабораторную работу, я изучил несколько способов перезагрузки ОС. Познал азы формирования окон на assembler'е. Узнал какие используются прерывания для BIOS.

Лабораторная работа № 4.

Конвертор из символа в ASCII код

Цель работы: Дополнить меню ОС.

Задание: Создать конвертор, обеспечивающий получить из символа ASCII код, задействуя кнопку F3.

Новые добавления:

Алгоритм конвертирования простой: пока частное не равно 0, делим его, делим и еще раз делим на 10d, запихивая остатки в стек. Потом - извлекаем из стека. Вот и вся конвертация из HEX в BIN. Это если в двух словах.

А если подробно, то вот что получается:

1 - подготавливаем делимое. Как уже говорилось, оно у нас задается неявно - обязательно через AX. А параметр у нас - через DX процедуре передается. Вот и перемещаем.

2 - это, собственно, делитель.

3 - очищаем CX. Он у нас будет в качестве счетчика.

4 - очищаем DX. Если не очистим, то мы не 1234h какое-нибудь на 10 делить будем, а 12341234h. Первое 1234 нам надо - очищать.

5 - делим. Частное - в AX, остаток - в DX.

6 - заносим остаток DX в стек.

7 - CX=CX+1. Это мы считаем сколько раз заносили остаток в стек, по кругу (прыжок на метку non_zero), пока AX не равно 0 (8). То есть делим, делим AX, пока он не окажется таким, что делить, собственно, нечего.

Деление закончено, число, которое мы поделили AX до его полного обнуления, хранится в CX.

Дальше все просто. Нам нужно такое же количество раз CX извлечь значение DX из стека. И это будет "HEX", переведенный в DEC. (Оно же: число в двоичном коде, разобранное на последовательность десятичных цифр).

Цикл, в теле которого извлечь цифру (9) и напечатать цифру (10). Столько же раз, сколько мы и делили наше исходное шестнадцатеричное число.

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

Выводы:

Выполнив данную лабораторную работу, я изучил алгоритм преобразования шестнадцатеричного числа в десятичное. Так как символ в регистре хранится в HEX формате.

Лабораторная работа № 5.

Динамический пароль для входа в ОС

Цель работы: Дополнить меню ОС.

Задание: Создать паролирование ОС, задействуя кнопку F2.

Новые добавления:

В меню программы есть возможность изменить текущий пароль, нажав F2. За это действие отвечает процедура changepass, которое сохраняет введенную строку в временный буфер и после чего с помощью процедуры writesec записываю в сектор.

writ db 13,10,'Write sector', 0Dh,0Ah,0

sect db 1; sector number (1. .18).

cyld db 10; cylinder number (0. .79).

head db 0; head number (0. .1).

drive db 0; drive number (0. .3); A: =0, B: =1...

BUFFERDB 512 dup (0); prosto izmenili razmer do 512

Passworddb512 dup (0)

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 обеспечивает запись данных в 10 цилиндр, в 1 сектор, с 0 головки. Заранее заполненный буфер Password, будет помещен в регистр bx для записи.

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

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 обеспечивает считывание данных из прежних секторов в буфер BUFFER. Дальше этот буфер можно использовать в сравнение с веденным паролем или просто вывести на экран.

Характеристики

Тип файла
Документ
Размер
5,95 Mb
Учебное заведение
Неизвестно

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее