Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прерывания BIOS, полное описание API 
:(
    Опции темы
scuter
Дата 15.11.2011, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



в BOIS-е, есть своё API которое даёт возможность работать с оборудованием,
скажите а где можно достать полное описание этого API (т.е. прерывания)

особо интересует такие прерывания,

int 01h    ;Пошаговый режим (отладка)
int 08h    ;Таймер (IRQ0)
int 09h    ;Клавиатура (IRQ1)
int 11h    ;Список оборудования
int 16h    ;Клавиатурный ввод/вывод
int 1Ah    ;Системное время
int 41h    ;Параметры жёсткого диска 0
int 46h    ;Параметры жёсткого диска 1
int 44h    ;Nowell Netware API
int 4Ah    ;Будильник пользователя

Это сообщение отредактировал(а) scuter - 15.11.2011, 12:05
PM MAIL   Вверх
500mhz
Дата 15.11.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



http://www.ctyme.com/intr/int.htm

надеюсь вы собираетесь это использовать REAL MODE ? ))) 


--------------------

PM MAIL ICQ   Вверх
iff
Дата 15.11.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Кстате, некоторые прерывания работают только на определённыз компьютерах. Например, int 4Ah.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
scuter
Дата 15.11.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



500mhz, спасибо,
только я не совсем разобрался,
как в прерывании int 01h  назначить функцию которая будет обрабатывать команды,
и ещё в добавок не как не пойму как использовать регистры встроеного дебагера DR0, DR2, DR3, DR4

Добавлено через 12 минут и 31 секунду
Цитата(iff @  15.11.2011,  14:40 Найти цитируемый пост)
Кстате, некоторые прерывания работают только на определённыз компьютерах. Например, int 4Ah.

ага с этим тоже проблемы,
у меня есть возможность использовать BIOS (i815EP, EasyNote TJ75, VBox),
и ещё в не скомпиленом виде (5520, 5530, gxi, i430tx, i810, sis5597, via580)
и как тут API подбешёшь.

если коротко выражаясь, мне нужно нормально научится работать с:
дебагером, монитором, клавиатурой и мышью
PM MAIL   Вверх
iff
Дата 15.11.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(scuter @  15.11.2011,  15:08 Найти цитируемый пост)
как в прерывании int 01h  назначить функцию которая будет обрабатывать команды

Если установлен флаг TF, то после каждой инструкции вызывается это прерывание (ещё смотрите int 03h - оно тоже вызывается, но при этом ещё и при команде остановки (машинный код этой команды остановки - 0CCh)).
Цитата(scuter @  15.11.2011,  15:08 Найти цитируемый пост)
и ещё в добавок не как не пойму как использовать регистры встроеного дебагера DR0, DR2, DR3, DR4

что за встроенный дебагер? куда он встроен?


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
500mhz
Дата 16.11.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



че там не понятного с INT 0х1 и INT 0x3 ?
если флаг TF стоит то после каждой команды вызывается int 0x1, в стек заноситься AF и IP, TF сбрасываеться.
INT 0x3 это breakpoint (точка останова) когда проц встречает 0xcc вызывается INT 0x3 в стеке опять же AF IP, TF сброшен , прерывания запрещены.

а DR0-DR7 из другой оперы


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 21.11.2011, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(500mhz @  16.11.2011,  14:30 Найти цитируемый пост)
че там не понятного с INT 0х1 и INT 0x3 ?
если флаг TF стоит то после каждой команды вызывается int 0x1, в стек заноситься AF и IP, TF сбрасываеться.
INT 0x3 это breakpoint (точка останова) когда проц встречает 0xcc вызывается INT 0x3 в стеке опять же AF IP, TF сброшен , прерывания запрещены.

и всё таки не понятно как запускать эту отладку ставить флаг TF или INT 0х1, INT 0x3
и если произошёл шаг отладки, как обработать результат выполнения комманды
т.е. куда втыкать эту функцию
или надо создавать прерывание(своё собственное)


куда это дело втыкать

Код

buferud db    512 dup(0); буфер
index   db    0,0
    jmp zapusk
dntp:   ;дебаг функция
    pushf           ;сливаем все в буфер
    cld
    mov dword [buferud],EAX
    mov dword [buferud],ECX
    mov dword [buferud],EDX
    mov dword [buferud],EBX
    mov dword [buferud],ESP
    mov dword [buferud],EBP
    mov dword [buferud],ESI
    mov dword [buferud],EDI
    pop AX
    mov dword [buferud],AX
    popf
  ret
zapusk:
  mov AX, [dntp] ; указываем адрес функции обработки дебага
  int 01h ;запускаем отладку
  int 03h
  .........................



PM MAIL   Вверх
iff
Дата 21.11.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(iff @  15.11.2011,  19:34 Найти цитируемый пост)
Если установлен флаг TF, то после каждой инструкции вызывается это прерывание (ещё смотрите int 03h - оно тоже вызывается,


Цитата(500mhz @  16.11.2011,  14:30 Найти цитируемый пост)
 стек заноситься AF и IP, TF сбрасываеться.

Здесь есть неточности (выделили жирным). Итак: прерывание int 01h вызывается после каждой инструкции (за исключением инструкции int), если установлен флаг TF. Прерывание int 03 вызывается когда процессор видит инструкцию int 03 или 0CCh.
Пример:
Код

    .MODEL    TINY
    .CODE
    ORG    100H

MAIN    PROC    NEAR
    CLI
    MOV    AX, 2501H
    MOV    DX, OFFSET INT01
    INT    21H
    MOV    AX, 2503H
    MOV    DX, OFFSET INT03
    INT    21H
    STI

    PUSHF
    POP    AX
    OR    AX,0000000100000000B
    PUSH    AX
    POPF

    MOV    AH,09H
    MOV    DX, OFFSET MSG
    DB    0CCH
    INT    21H

    MOV    AX,1234H
    MOV    BX,5678H
    ADD    AX,BX
    MOV    DX,AX
    NOT    AX
    ADD    DX,AX

    RET

MSG    DB    'Debugger is running.', 0DH, 0AH, '$'
MAIN    ENDP

INT01    PROC    NEAR
    PUSH    AX DX DS

    PUSH    CS
    POP    DS

    PUSH    DX
    PUSH    AX
    MOV    AH,09H
    MOV    DX,OFFSET SAX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H

    MOV    DX,OFFSET SBX
    INT    21H
    PUSH    BX
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H

    MOV    DX,OFFSET SCX
    INT    21H
    PUSH    CX
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H

    MOV    DX,OFFSET SDX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H

    MOV    DX,OFFSET SSI
    INT    21H
    PUSH    SI
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H

    MOV    DX,OFFSET SDI
    INT    21H
    PUSH    DI
    CALL    HEXOUTW
    MOV    DX,OFFSET SEND
    INT    21H
    INT    21H

    MOV    AH,10H
    INT    16H
    POP    DS DX AX
    IRET
SAX    DB    'AX=$'
SBX    DB    'BX=$'
SCX    DB    'CX=$'
SDX    DB    'DX=$'
SSI    DB    'SI=$'
SDI    DB    'DI=$'
SEND    DB    0DH,0AH,'$'
INT01    ENDP

INT03    PROC    NEAR
    PUSH    AX
    MOV    AX,0E07H
    INT    10H
    POP    AX
    IRET
INT03    ENDP


HEXOUTW    PROC    NEAR
    PUSH    BP
    MOV    BP,SP
    PUSH    AX BX CX DX DS
    PUSH    CS
    POP    DS
    MOV    BX,OFFSET HEXTBL
    MOV    CL,4
    MOV    AX,[BP+4]
    MOV    AL,AH
    CALL    HEXOB
    MOV    AX,[BP+4]
    CALL    HEXOB
    POP    DS DX CX BX AX BP
    RET    2
HEXOB:    PUSH    AX
    SHR    AL,CL
    CALL    HEXO4
    POP    AX
    AND    AL,00001111B
    CALL    HEXO4
    RET
HEXO4:    XLAT
    MOV    AH,02H
    MOV    DL,AL
    INT    21H
    RET
    HEXTBL    DB    '0123456789ABCDEF'
HEXOUTW    ENDP
    END    MAIN

Можно проследить как выполняются инструкции
Код

    MOV    AH,09H
    MOV    DX, OFFSET MSG
    DB    0CCH
    INT    21H

    MOV    AX,1234H
    MOV    BX,5678H
    ADD    AX,BX
    MOV    DX,AX
    NOT    AX
    ADD    DX,AX

в получившемся дебаггере, и услышать звук ("пик") при исполнении команды 0CCh.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
500mhz
Дата 21.11.2011, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



iff и не лень тебе? ))))


--------------------

PM MAIL ICQ   Вверх
scuter
Дата 21.11.2011, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



iff, не получается переделать код под FASM
там процедуры он не переваривает

Цитата

MAIN    PROC    NEAR
error: illegal instruction.

PM MAIL   Вверх
scuter
Дата 21.11.2011, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



переделал код под FASM

но он не работает
экран просто чёрный
Код

use16
    ORG    100H

MAIN:   ; PROC    NEAR
    CLI
    MOV    AX, 2501H
    MOV    DX, [INT01]
    INT    21H
    MOV    AX, 2503H
    MOV    DX, [INT03]
    INT    21H
    STI

    PUSHF
    POP    AX
    OR    AX,0000000100000000B
    PUSH    AX
    POPF

    MOV    AH,09H
    MOV    DX, MSG
    DB    0CCH
    INT    21H

    MOV    AX,1234H
    MOV    BX,5678H
    ADD    AX,BX
    MOV    DX,AX
    NOT    AX
    ADD    DX,AX

    RET    6

MSG    DB    'Debugger is running.', 0DH, 0AH, '$'
;MAIN    ENDP

INT01:    ;PROC    NEAR
    PUSH    AX DX DS

    PUSH    CS
    POP    DS

    PUSH    DX
    PUSH    AX
    MOV    AH,09H
    MOV    DX,SAX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SBX
    INT    21H
    PUSH    BX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SCX
    INT    21H
    PUSH    CX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SSI
    INT    21H
    PUSH    SI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDI
    INT    21H
    PUSH    DI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H
    INT    21H

    MOV    AH,10H
    INT    16H
    POP    DS DX AX
    IRET
SAX    DB    'AX=$'
SBX    DB    'BX=$'
SCX    DB    'CX=$'
SDX    DB    'DX=$'
SSI    DB    'SI=$'
SDI    DB    'DI=$'
SEND    DB    0DH,0AH,'$'
;INT01    ENDP

INT03:  ;  PROC    NEAR
    PUSH    AX
    MOV    AX,0E07H
    INT    10H
    POP    AX
    IRET
;INT03    ENDP


HEXOUTW:  ;  PROC    NEAR
    PUSH    BP
    MOV    BP,SP
    PUSH    AX BX CX DX DS
    PUSH    CS
    POP    DS
    MOV    BX,HEXTBL
    MOV    CL,4
    MOV    AX,[BP+4]
    MOV    AL,AH
    CALL    HEXOB
    MOV    AX,[BP+4]
    CALL    HEXOB
    POP    DS DX CX BX AX BP
    RET    2
HEXOB:    PUSH    AX
    SHR    AL,CL
    CALL    HEXO4
    POP    AX
    AND    AL,00001111B
    CALL    HEXO4
    RET
HEXO4:    
    ADD    BL,AL
    MOV   AL,byte [DS:BX] ;XLAT
    MOV    AH,02H
    MOV    DL,AL
    INT    21H
    RET
HEXTBL    DB    '0123456789ABCDEF'
  RET
;HEXOUTW    ENDP
    ;END    MAIN

PM MAIL   Вверх
iff
Дата 21.11.2011, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(scuter @  21.11.2011,  19:50 Найти цитируемый пост)
    ADD    BL,AL
    MOV   AL,byte [DS:BX] ;XLAT

ЗАЧЕМ???

Цитата(scuter @  21.11.2011,  19:50 Найти цитируемый пост)
переделал код под FASM

имя файла после компиляции. com или exe?

Добавлено через 1 минуту и 27 секунд
Цитата(scuter @  21.11.2011,  19:50 Найти цитируемый пост)
[INT01]


Цитата(scuter @  21.11.2011,  19:50 Найти цитируемый пост)
[INT03]

Нам нужен адрес, а не значение по этому адресу!


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
scuter
Дата 21.11.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 13.6.2008

Репутация: 1
Всего: 1



Цитата(iff @  21.11.2011,  20:48 Найти цитируемый пост)
имя файла после компиляции. com или exe?


имя файла com

подправил код всё равно не работает.
всё равно не хочет работать
Код

use16
    ORG    100H

MAIN:   ; PROC    NEAR
    CLI
    MOV    AX, 2501H
    MOV    DX, INT01
    INT    21H
    MOV    AX, 2503H
    MOV    DX, INT03
    INT    21H
    STI

    PUSHF
    POP    AX
    OR    AX,0000000100000000B
    PUSH    AX
    POPF

    MOV    AH,09H
    MOV    DX, MSG
    DB    0CCH
    INT    21H

    MOV    AX,1234H
    MOV    BX,5678H
    ADD    AX,BX
    MOV    DX,AX
    NOT    AX
    ADD    DX,AX

    RET    6

MSG    DB    'Debugger is running.', 0DH, 0AH, '$'
;MAIN    ENDP

INT01:    ;PROC    NEAR
    PUSH    AX DX DS

    PUSH    CS
    POP    DS

    PUSH    DX
    PUSH    AX
    MOV    AH,09H
    MOV    DX,SAX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SBX
    INT    21H
    PUSH    BX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SCX
    INT    21H
    PUSH    CX
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDX
    INT    21H
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SSI
    INT    21H
    PUSH    SI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H

    MOV    DX,SDI
    INT    21H
    PUSH    DI
    CALL    HEXOUTW
    MOV    DX,SEND
    INT    21H
    INT    21H

    MOV    AH,10H
    INT    16H
    POP    DS DX AX
    IRET
SAX    DB    'AX=$'
SBX    DB    'BX=$'
SCX    DB    'CX=$'
SDX    DB    'DX=$'
SSI    DB    'SI=$'
SDI    DB    'DI=$'
SEND    DB    0DH,0AH,'$'
;INT01    ENDP

INT03:  ;  PROC    NEAR
    PUSH    AX
    MOV    AX,0E07H
    INT    10H
    POP    AX
    IRET
;INT03    ENDP


HEXOUTW:  ;  PROC    NEAR
    PUSH    BP
    MOV    BP,SP
    PUSH    AX BX CX DX DS
    PUSH    CS
    POP    DS
    MOV    BX,HEXTBL
    MOV    CL,4
    MOV    AX,[BP+4]
    MOV    AL,AH
    CALL    HEXOB
    MOV    AX,[BP+4]
    CALL    HEXOB
    POP    DS DX CX BX AX BP
    RET    2
HEXOB:    PUSH    AX
    SHR    AL,CL
    CALL    HEXO4
    POP    AX
    AND    AL,00001111B
    CALL    HEXO4
    RET
HEXO4:    
    ADD    BL,AL
    MOV   AL,byte [DS:BX] ;XLAT
    MOV    AH,02H
    MOV    DL,AL
    INT    21H
    RET
HEXTBL    DB    '0123456789ABCDEF'
  RET
;HEXOUTW    ENDP
    ;END    MAIN


Добавлено через 4 минуты и 14 секунд
Цитата(iff @  21.11.2011,  20:48 Найти цитируемый пост)

Цитата(scuter @  21.11.2011,  21:29 Найти цитируемый пост)

    ADD    BL,AL
    MOV   AL,byte [DS:BX] ;XLAT

ЗАЧЕМ???


команда XLAT не работает в FASM
PM MAIL   Вверх
iff
Дата 21.11.2011, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(scuter @  21.11.2011,  21:29 Найти цитируемый пост)
команда XLAT не работает в FASM 

???!!!
Цитата

xlat replaces a byte in the AL register with a byte indexed by its value in a translation table addressed by BX or EBX. The operand should be a byte memory addressed by BX or EBX with any segment prefix. This instruction has also a short form xlatb which has no operands and uses the BX or EBX address in the segment selected by DS depending on the current code setting. 

в качестве операнда нужно bx

Если даже представить, что не работает - то используйте вставку машинного кода:
Код

DB 0D7H


Изучайте fasm и переделывайте.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.