Здрасьте, всем! Начал изучение статьи Serrgio / HI-TECH - Введение в машинный код Вопрос по мометну, где с помощью INT10 рисуется квадрат в квадрате. Код (Text): XOR AL,AL ;первый раз MOV BH,10 MOV CH,05 MOV CL,10 MOV DH,10 MOV DL,3E [b]MOV AH,06 [/b] INT 10 XOR AL,AL ;второй раз MOV BH,10 MOV CH,06 MOV CL,11 MOV DH,0F MOV DL,3D INT 10 INT 20 Так как регистр AH не переписывается, то можно не прописывать повторно это команду. И это работает, если я делаю пример в cmd из под Windows XP. Но если этот пример делаю на ноутбуке из под DOS 6.22 прорисовывается только первый квадрат, а чтобы прорисовался второй квадрат, необходимо прописывать повторно MOV AH,06. Почему так происходит?
видимо системный обработчик int10 отличается в оригинальном MSDOS и виндовой подсистеме. лучший вариант - выставлять нужные значения перед каждым вызовом и забыть о различиях версийю
Вообще говоря гарантирует В нормальной документации указывают какие регистры изменяются. Код (Text): INT 10h, 06h (6) Scroll Window Up Scrolls a specified window upward a specified number of lines. On entry: AH 06h AL Number of lines to scroll (if 0, clear entire window) BH Display attribute for blank lines CH Row number of upper left corner CL Column number of upper left corner DH Row number of lower right corner DL Column number of lower right corner Returns: None Registers destroyed: AX, SP, BP, SI, DI
То есть согласно этой доки AX переписывается (и AH слдедовательно), значит MOV AH,6 надо прописывать каждый раз? Эти доки отличаются для разных ОСей?
Да никак После выхода из обработчика ясное дело будет то же значение, что и перед входом. Просто имеется ввиду что обработчик стек использует. Да. В каком смысле? Это документация на сервисы BIOS, от OS не зависит. Список изменяемых регистров - это список регистров которые могут изменяться. Остальные гарантированно сохраняются. Но это не значит что AX к примеру обязательно изменится. Некоторые реализации могут его и не менять. Плюс вектор прерывания BIOS может быть перехвачен к примеру ОС, и её обработчик будет сохранять/восстанавливать изменённые регистры. Но на это лучше не надеяться.