Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
26th
Ноя
Дизассемблировать Обработчик прерываний Bios для клавиатуры
Posted by bullvinkle under Пост-обзор
Не знаю уж у кого спросить, чтоб подсказали. Перенесите, если уж совсем не в той теме.
В университете задали задание вытащить программу базового обработчика прерываний BIOS для клавиатуры(09H)
Сказали использовать пакет программ RunBIOS: вроде как прога intview должна выдавать адрес сегмента и адрес смещения, а потом в sourcere вбиваешь этот адрес и получаешь текст программы обработчика. Если так делать, то выдается какая-то ерунда, не похожая на то, что нужно! Есть подозрение, что обработчик прерывания int 9 не указывает в BIOS, а указывает в DOS, так как DOS устанавливает свой обработчик
Чел из параллельной группы сказал посмотреть команду JMP в сегменте F000 со смещением E987, которая перескакивает на начало обработчика прерываний (им так объяснил их преподаватель). Вот только откуда берется этот адрес непонятно. Наш препод требует объяснений. Может кто-нибудь знает откуда этот(F000 E987) адрес берется?
Исходный код загрузчика:
.MODEL tiny
.CODE
.STARTUP
start: jmp boot_loader ; прыгаем на начало
oem_id DB 'Tronix ' ; (C) Tronix
bytespersector DW 512 ; Табличка заполнена
sectorspreclu DB 1 ; для 1,44Mb дискеты
reservedsectors DW 1
fatcount DB 2
rootsize DW 224
totalsectors DW 2880
mediadescriptor DB 0F0h
fatsize DW 9
sectorspertrack DW 18
readwriteheads DW 2
hiddensectorsl DW 0
hiddensectorsh DW 0
longtotal DW 0,0
drivenum DB 0
reserved DB 1
extbmagic DB 29H ; Extended record
serialnum DW 0,0
volumelab DB 11 dup (?)
fattype DB 'FAT12 '
boot_loader:
cli ; запрет прерываний
mov ax,cs ; инициализируем сегментные регистры
mov ds,ax
mov es,ax
mov ss,ax
mov sp,7C00h ; установим стек
sti ; разрешить прерывания
cld ; установить флаг направления - вперед.
mov di,offset addr+7b00h ;прибавляем 7b00h, ибо org 100h
mov dx,ds:[9*4+2] ; получить смещение 9 прерывания в таблице
call word2hex ; конвертнуть в 16-ричную по адресу ds:di
mov di,offset offs+7b00h
mov dx,ds:[9*4] ; сегмент 9 прерывания в таблице
call word2hex ; конвертнуть в 16-ричную по адресу ds:di
mov si,offset mes+7b00h
call loop_out ; печатаем все на экране
hlt ; вешаем процессор.
;процедура вывода текста на экран.
;в SI - смещение на строку. 0 - признак конца
;строки
loop_out:
push ax
push bx
l_o:
lodsb
test al,al
jz done
mov ah,0eh
mov bx,7h ; BH=0(Page) Bl=7(Color)
int 10h
loop short l_o
done:
pop bx
pop ax
ret
;конвертирование байта в Hex
byte2hex:
push cx
mov cx,2
L1: rol dl,4
mov ax,300fh
and al,dl
aaa
aad 11h
stosb
loop L1
pop cx
ret
;конвертирование слова в Hex
word2hex:
push cx
mov cx,2
L2: rol dx,8
call byte2hex
loop L2
pop cx
ret
mes db '(c) Tronix 2010',10,13
db 'Hello from BOOT!',10,13
db 'INT 09h vector at '
addr db 4 DUP('?')
db ':'
offs db 4 DUP('?')
db 10,13,10,13
db 'Press RESET or CTRL+ALT+DEL...',0
Free EQU (512 - 2) - ($-start)
db free dup(0)
if Free LT 0
.ERR
%out FATAL PROBLEM: boot sector is too large (>512 bytes)
endif
id DW 0AA55h
end
Компилировал:
tasm boot.asm
tlink /t boot.obj
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)