Помогите пожалуйста: Код (Text): ; Çàïðåùàþ ïðåðûâàíèÿ îò óñòðîéñòâà mov DX,03F6h mov AL,00000010b out DX,AL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Æäó êîãäà óñòðîéñòâî îñâîáîäèòüñÿ mov DX,01F7h __test_BSY: in AL,DX and AL,10000000b jnz __test_BSY ; Âûáèðàþ óñòðîéñòâî mov DX,01F6h mov AL,11100000b out DX,AL ; Æäó êîãäà óñòðîéñòâî áóäåò ãîòîâî ê ïðèåìó êîìàíäû mov DX,01F7h __test_BSY_DRDY: in AL,DX and AL,10000000b jnz __test_BSY_DRDY and AL,01000000b jz __test_BSY_DRDY ; Çàïèñûâàþ êîä êîìàíäû â ðåãèñòð mov DX,01F7h mov AL,0ECh out DX,AL ; Æäó êîãäà êîìàíäà áóäåò âûïîëíåíà è óñòðîéñòâî áóäåò ãîòîâî ê îáìåíó äàííûìè mov DX,01F7h __wait1: in AL,DX and AL,10000000b jnz __wait1 and AL,00001000b jz __wait1 ; ×èòàþ äàííûå cld mov AX,0B800h mov DI,AX mov DX,01F0h rep outsw ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Ðàçðåøàþ ïðåðûâàíèÿ îò óñòðîéñòâà mov DX,03F6h mov AL,00000000b out DX,AL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; jmp $ times 512-$ db 00h Я перечитал кучу документаций, статей и пр. Переписал килобайты кода, а всё равно ничего не работает. Объясните в чем ошибка?
1. отсутствует величина длины для REP OUTSW ! Не вижу чему CX равен!? CX=0x100! 2. Для ATAPI команда другая, не 0xEC, это если ты CDROM будешь терзать по IDE!... 3. в 0x1F6 засылается СООТВЕТСТВУЮЩИЙ подключенному приводу КОД! Т.е. разберись на тот ли девайс "метишь"? Успехов!
Black_mirror - совершенно прав!!! Очевидно чел читал моловато и совершенно не использовал трассировщик, а зря! Уже давно бы практически понял "картину" и причину... Еще можно в сборную солянку советов добавить cli...sti для куска кода, что собственно читает,хотя это некритично по моему. Думаю ещё, что попытка использовать это: mov AX,0B800h mov DI,AX говорит скорее всего о том, что хочется выводить дамп на экран, но.... но если это так, то 0B800h - это ведь СЕГМЕНТ видеобуфера, а не смещение! Причесав концовку, за тебя h1t0n и надеясь, что ЭТО поможет тебе разрубить узлы, ОКОНЧАТЕЛЬНО все понять и двигаться тебе дальше, лицезреем такой блок PIO чтения: .... .... ; PIO чтение сектора (512 байт)IDE устройства mov DX,01F0h mov AX,0B800h mov ES,AX xor DI,DI ; = 0 - начало видеобуфера! mov CX, 100h ; вычитать 256 WORD`ов! cld cli ; выключим прерывания для надежности rep insw ; струя 512 байт сливается в [ESI]... sti ; включить прерывания! ........ ........