Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 22:29   #1
Zapt1k
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 10
По умолчанию Assembler доработать

Помогите пожалуйста доработать программу.
Задача: Перехватывать прерывания от системного таймера, уменьшать их частоту путем пересчета и периодически выводить на экран изображение флага России;
б) формат программы – EXE-программа;
в) ввод с клавиатуры – средствами BIOS;
г) вывод на экран – в графическом режиме;
д) динамическое распределение памяти – освободить лишнюю память.

Код:
.model tiny
.code
start:
org 100h
main proc 
;mov AX, data ;инициализация 
mov DS,AX ;сегментного регистра DS 
;Прочитаем и сохраним исходное содержимое вектора 8 
mov AX,3508h 
int 21h 
mov word ptr old_08h,BX 
mov word ptr old_08h+2,ES 
;Установим наш обработчик прерываний new_08h 
mov AX, 2508h
mov DX,offset new_08h 
push DS ;Сохраним на время DS 
push CS ;Отправим содержимое CS 
pop DS ;в DS 
int 21h ;Вызов DOS (функции 25h) 
pop DS ;Восстановим DS 
;Сымитируем действия, выполняемые в течение 3 с, просто зациклив программу 
stop: 
jmp stop 
;Вторая ветвь программы, активизируемая по истечении 3 с 
fin: 
;белая полоса
MOV AH,07h
MOV AL, 09h
MOV BH, 0F7h
MOV CH,00h
MOV CL,00h
MOV DH,18h
MOV DL,4Fh
INT 10h
;синяя полоса
MOV AH,07h
MOV AL, 09h
MOV BH, 097h
MOV CH,08h
MOV CL,00h
MOV DH,18h
MOV DL,4Fh
INT 10h
;красная полоса	 
MOV AH,07h
MOV AL, 09h
MOV BH, 0C4h
MOV CH,18h
MOV CL,00h
MOV DH,18h
MOV DL,4Fh
INT 10h

mov CS:time, 20
jmp start
main endp 
;Прикладной обработчик прерываний от таймера, 
;активизируемый 18,2 раза в секунду 
new_08h proc 
push AX ;Сохраним два используемых 
push BP ;в обработчике регистра 
dec CS:time ;Декремент интервала времени 
jnz outint ;Пока не 0, выйти из прерывания 
;Содержимое ячейки time уменьшилось до 0, выполнить переключение программы 
mov BP,SP ;ВР=текущая вершина стека 
mov AX,offset fin;Смещение точки перехода 
mov [BP+4],AX ;/Отправим его в стек на место IP 
mov AX,seg fin ;/Сегмент точки перехода 
mov [BP+6],AX ;/Отправим его в стек на место CS 
outint: mov AL,20h ;/Команда EOI в контроллер 
out 20h,AL; /прерываний 

    MOV AX,0600h   ; AH=06 (прокрутка), AL=00 (весь экран)
    MOV BH,07      ; нормальный атрибут
    MOV CX,0000    ; верхняя левая позиция
    MOV DX,184Fh   ; нижняя правая позиция
    INT 10h        ; передача управления в BIOS
	
	     MOV AH,02    ; номер функции
     MOV BH, 00   ; номер страницы
     MOV DH,00  ; номер строки
     MOV DL,00 ; номер столбца
     INT 10h        ; устанавливаем курсор

	 
pop BP ;/Восстановим оба 
pop AX ;/сохраненных регистра 
iret ;/Выход из прерывания 
time dw 20 ;/Ячейка для отсчета времени 
new_08h endp 
;/Поля данных 
old_08h dd 0 ;/Ячейка для хранения исходного вектора 
end start
Zapt1k вне форума Ответить с цитированием
Старый 24.12.2014, 19:13   #2
Zapt1k
Пользователь
 
Регистрация: 12.05.2013
Сообщений: 10
По умолчанию

up up up up
Zapt1k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
доработать мод 40$ AlexWeb Фриланс 0 21.02.2013 02:40
Доработать мод 20$ AlexWeb Фриланс 4 09.02.2013 16:54
Доработать код alex1808 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 18.12.2011 20:30
Доработать программу за $ lutdan Фриланс 3 09.05.2011 17:32
C++.Доработать 2 программы Eliviel Помощь студентам 4 26.12.2010 12:25