С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 17.11.2009
Сообщений: 38

Дизассемблировать Обработчик прерываний Bios для клавиатуры

26.11.2010, 17:15. Показов 3162. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В университете задали задание вытащить программу базового обработчика прерываний BIOS для клавиатуры(09H)
Сказали использовать пакет программ RunBIOS: вроде как прога intview должна выдавать адрес сегмента и адрес смещения, а потом в sourcere вбиваешь этот адрес и получаешь текст программы обработчика. Если так делать, то выдается какая-то ерунда, не похожая на то, что нужно! Есть подозрение, что обработчик прерывания int 9 не указывает в BIOS, а указывает в DOS, так как DOS устанавливает свой обработчик
Чел из параллельной группы сказал посмотреть команду JMP в сегменте F000 со смещением E987, которая перескакивает на начало обработчика прерываний (им так объяснил их преподаватель). Вот только откуда берется этот адрес непонятно. Наш препод требует объяснений.

Вопрос: Может кто-нибудь знает откуда этот(F000 E987) адрес берется? мне нужно понять только это.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2010, 17:15
Ответы с готовыми решениями:

Обработчик прерываний от клавиатуры
Привет, форумчане! Недавно в универе мне задали лабораторную и сказали "Делай как хочешь, но к сроку успей". Вся ироня в том, что...

Не пойму, как активируется обработчик прерываний от клавиатуры?
Доброй ночи! Есть несколько вопросов. Правильно ли я понимаю: после нажатия на клавишу клавиатура генерирует сигнал контролёру...

Обработчик прерываний от клавиатуры
Ув. люди смыслящие в Ассемблере к вам с большой просьбой,а именно: нужно написать прогу(обработчик прерываний от клавиатуры),что бы при...

3
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
26.11.2010, 17:55
Возможно, там действительно находится обработчик int 9, но только для того компа, про который говорил препод. На других компах он может располагаться в совершенно другом месте.

А точно DOS перехватывает 9 прерывание-то? Если да - то либо смотреть где там он прыгает на старое int 9, либо написать boot-сектор, который выводит вектор 09 прерывания на экран до загрузки DOS.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
26.11.2010, 19:32
Ну вот, набросал быстренько boot сектор для дискеты, создал пустой образ дискетки с этим загрузчиком и загрузил в виртуальной машине Virtual PC 2007. Удивительно, но адрес и в правду совпал с вышеуказанным. В архиве прикладываю файл-образ дискеты (testimg.img), который можно записать на обычную 1,44Mb дискету и загрузиться на реальном компе с нее, а можно подцепить образ в любую виртуальную машину. Так же в архиве исходный код загрузчика (boot.asm) и уже скомпилированная версия (boot.bin).
Исходный код загрузчика:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.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
Миниатюры
Дизассемблировать Обработчик прерываний Bios для клавиатуры  
Вложения
Тип файла: rar test_img.rar (1.9 Кб, 33 просмотров)
1
0 / 0 / 1
Регистрация: 17.11.2009
Сообщений: 38
28.11.2010, 19:17  [ТС]
Огромное спасибо за помощь!
F000 E987 - базовая точка входа, располагается в ПЗУ, для всех компов одинаковая. Не знал, как ее определить, но с твоей дискетой разобрался. Еще раз спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2010, 19:17
Помогаю со студенческими работами здесь

Обработчик прерываний от клавиатуры
Написать обработчик прерываний от клавиатуры, который позволяет работать на частично неисправной клавиатуре путем набора ASCII-кодов на...

Обработчик прерываний клавиатуры
Написать обработчик прерываний от клавиатуры, функционирующий в двух режимах: 1) обычный, 2) ввод ASCII кодов букв в десятичном формате...

Какие функции прерываний используются в обработчике прерываний от клавиатуры?
Под функциями же имеется ввиду int ..h?

обработчик прерываний
вообщем создал код обработчика прерываний,который должен менять последнюю строку 10-ю разными цветами.откомпилировал и етц.при открытии...

Обработчик прерываний
Задача: написать обработчик прерываний, заменяющий вектор прерывания от часов (1СН) и выводящий на экран окно размером в целый экран,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru