Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: MERCURY127
Дата сообщения: 21.10.2011 13:32
из RBIL:
--------B-1300-------------------------------
INT 13 - DISK - RESET DISK SYSTEM
AH = 00h
DL = drive (if bit 7 is set both hard disks and floppy disks reset)
Return: AH = status (see #00234)
CF clear if successful (returned AH=00h)
CF set on error
Note: forces controller to recalibrate drive heads (seek to track 0)
for PS/2 35SX, 35LS, 40SX and L40SX, as well as many other systems,
both the master drive and the slave drive respond to the Reset.
дело наверное в том, что для биоса диски с 0 по 127 включительно - гибкие, а с 128 по 255 включительно - жесткие. 80h означает что сбросятся только первый жесткий и первый гибкий диски, без учета примечания выше... я понимаю так
Автор: bomzzz
Дата сообщения: 21.10.2011 14:00
вообще если контроллер сбросится все что к нему прицепленно тоже сбросится. вот же блин нигде четко не написано не понятно чему верить

Добавлено:
вот еще вариант. на кулакова и так часто жалуются а этот справочник производит впечатление серьезного
Начала системного программирования в среде MS-DOS 7 Автор: Н.Г. Хитрово
http://old-dos.ru/lib/book_1.html

Цитата:

8.01-44 INT 13\AH=00h\0Dh – сброс контроллера дисковода

При сбросе в начальное состояние контроллер заново заполняет свои регистры
данными из таблицы параметров соответствующего дисковода (A.08-2, A.13-1).
Сброс контроллера в начальное состояние необходим после каждого неудачного
обращения к дисководу на гибких или жестких магнитных дисках, и только потом
попытка обращения может быть повторена.

При вызове:
AH = 00h – обращение к флоппи-дисководу (на гибких дисках)
= 0Dh – обращение к HDD (на жестких магнитных дисках)
DL – номер дисковода (примечание1)

При неудачном завершении флаг CF установлен, в AH – код завершения (A.06-1).
Сброс флага CF означает успешное завершение

Примечание1: нумерация дисководов на гибких магнитных дисках начинается с
нуля: 00h – первый, 01h – второй и так далее, а нумерация
дисководов на жестких магнитных дисках – с 80h: 80h – первый,
81h – второй, и так далее. Нумерация дисководов (физических
дисков) не связана с буквенными обозначениями логических
дисков, которых может быть несколько на каждом дисководе.
Примечание2: если к одному контроллеру подключены два дисковода, то при
сбросе контроллера в начальное состояние происходит перевод
головок на нулевую дорожку в обоих дисководах. Когда нужна
только рекалибровка дисковода переводом головок на нулевую
дорожку без сброса контроллера, тогда нужно вызывать
INT 13\AH=11h (все прочие спецификации вызова такие же).

кулаков в принципе тоже самое опять же пишет, почти



Цитата:
что сбросятся только первый жесткий и первый гибкий диски, без учета примечания выше... я понимаю так

7 бит это 40H , а не 80H
Автор: MERCURY127
Дата сообщения: 21.10.2011 18:48
всегда думал, что биты считаются с нуля...
Автор: bomzzz
Дата сообщения: 21.10.2011 18:50
хм. может быть. знать бы что имелось ввиду. но тогда нельзя отличить 80h от 7 бита

Добавлено:

Цитата:
REBOOT очищает буферы диска, перезадает диски и организует 1-секундное ожидание перед осуществлением перезагрузки, чтобы дать возможность программам кэширования диска закончить запись любых кэшевых данных.

мне вообще вот это надо сделать. и вот понять не могу как. хотя и без этого работает вроде

Добавлено:

http://emanual.ru/download/8869.html
да вот тута пишуть как ты гавариш

Добавлено:
MERCURY127
ну как сделать то вот так: ???

Цитата:
mov    dl, 80h
mov    ah, 0
int    13h
mov    dl, 81h
mov    ah, 0
int    13h
Автор: MERCURY127
Дата сообщения: 21.10.2011 20:40
похоже да, если дисков два то 81, а вот если больше...
Автор: bomzzz
Дата сообщения: 21.10.2011 20:41
ну вот я и хотел сбросить сразу все. под досом максимум 4 может быть
Автор: MERCURY127
Дата сообщения: 21.10.2011 20:59
почему 4?
Автор: bomzzz
Дата сообщения: 21.10.2011 21:10
хм. патамуша. у меня так в биосе написькано если система легаси - то в режиме эммуляции включается только четыре устройства, а если нативная - винда то можно сразу и 4 иде устровства пихануть и два сата

Добавлено:
может 80аш все таки все сбросит? как бы проверить
Автор: MERCURY127
Дата сообщения: 21.10.2011 22:21
Легаци и пр это для иде только вроде. Раз написано от 0 до 255 значит теоретических ограничений нет. Можно в 12 усб портов воткнуть 12 флешек, в 6 сата - 6 винтов - и в теории они все должны быть перечислены... Не факт что дос их все увидит, но биосу же это пофиг - он про дос ничего не знает вообще?

Добавлено:
На скази вообще никаких лимитов
Автор: bomzzz
Дата сообщения: 21.10.2011 22:36
ну я не утверждаю а гавару почему так думаю. тем более как же правильно все диски сбросить.
Автор: MERCURY127
Дата сообщения: 22.10.2011 10:30
Надо код любого загрузчика типа граб посмотреть они же вроде норм работают
Автор: bomzzz
Дата сообщения: 22.10.2011 12:29
ни фига там в коде ковыряться. биос диски сбрасывают, а груб не обязательно это делает, ему же не надо выгружать кеширующие дос драйвера
Автор: MERCURY127
Дата сообщения: 22.10.2011 12:36
Разве мбр сектор знает о существовании "кеширующих драйверов" ?
Автор: bomzzz
Дата сообщения: 22.10.2011 13:29
врядлт мбр=пбр сбрасывают диски. контролер инициализируется в биосе
Автор: A1exSun
Дата сообщения: 22.10.2011 22:37

Код:     p = &time[0]; // time - строка "чч:мм"
    _asm { // вывод времени в правом верхнем углу
        mov ah, 0x13
        les bp, p
        mov cx, 5
        mov dh, 0
        mov dl, 75
        mov bh, 0x00
        mov bl, 0x07
        mov al, 0x00
        int 0x10
    }
Автор: bomzzz
Дата сообщения: 22.10.2011 23:07
это у тебя ассемблерная вставка для какого то языка?

http://www.emu8086.com/ отладчик удобный для 16 бит
Автор: A1exSun
Дата сообщения: 22.10.2011 23:09
bomzzz
ага, для C, компилятор Borland C++ 3.1
Автор: Abs62
Дата сообщения: 22.10.2011 23:09
A1exSun
Потому что не надо портить содержание некоторых регистров. Во встроенном ассемблере BC 3.1 можно безопасно менять AX, BX, CX, DX, ES. Если отключено использование регистровых переменных, ещё SI и DI. Всё остальное лучше не трогать, а если уж трогается - сохранять до и восстанавливать после.
Автор: akaGM
Дата сообщения: 22.10.2011 23:09
A1exSun
bp стрёмный регистр...

попробуй перед
les bp, p

написать
push bp

а после
int 10
его вытолкнуть
pop bp
Автор: A1exSun
Дата сообщения: 22.10.2011 23:12
Abs62 & akaGM спасибо!
Автор: bomzzz
Дата сообщения: 22.10.2011 23:12

Цитата:
Команда les считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр ES. Таким образом, команда

les reg,mem

эквивалентна следующей группе команд:

mov reg,word ptr mem

mov ES,word ptr mem+2

В качестве первого операнда команды les указывается регистр общего назначения; в качестве второго - ячейка памяти с двухсловным содержимым. Указатель, содержащийся в этой ячейке, может быть адресом как процедуры, так и поля данных. Команда не воздействует на флаги процессора.

Автор: A1exSun
Дата сообщения: 22.10.2011 23:23

Цитата:
А если запустить из доса, пишет "неверное время" и просит ввести новое значение Оо

А это потому что имя моей программы time.exe
Автор: bomzzz
Дата сообщения: 22.10.2011 23:27
гыгы. точно был такой прикол в досе
Автор: bomzzz
Дата сообщения: 23.10.2011 13:03
A1exSun
а почему не использовать дос-овские функции для вывода на экран? биосовские тормозные.
Автор: A1exSun
Дата сообщения: 23.10.2011 13:13
bomzzz
это в обработчик прерывания, там DOS нельзя
Автор: bomzzz
Дата сообщения: 23.10.2011 13:21

Цитата:
это в обработчик прерывания, там DOS нельзя

не понил. программа под биосом что ли работает?

Добавлено:
самое быстрое было бы прямо в видео память записать
Автор: A1exSun
Дата сообщения: 23.10.2011 13:57
bomzzz
ну в обработчике прерывания от какого-либо устройства printf выводит не то что ей указано


Цитата:
самое быстрое было бы прямо в видео память записать

как?
Автор: bomzzz
Дата сообщения: 23.10.2011 13:59
все равно не понял.


я так сходу не могу код написать. есть область видео памяти, так как ты выводишь в правый верхний угол можно предположить что видео режим у тебя один и тот же.
области видео памяти это область памяти определенных адресов, которая организована определенным образом и запись в нее сразу приводит к выводу символа на экран в нужном месте.
Автор: akaGM
Дата сообщения: 23.10.2011 14:00
A1exSun
писать в в ега/вга буфер
b800:xxxx в текстовом режиме или
a000:xxxx в графическом
Автор: bomzzz
Дата сообщения: 23.10.2011 14:00
то есть тебе надо просто командой типа stosb переписать свою строку со временем в нужное место видео памяти

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.