2.4. Реализация команды 8 драйвера
2.4.1.
Напишем программу для команды 8, которая будет осуществлять запись 5 байт в
буфер.
|
|
|
|
|
152 |
OUTPUT: |
|
|
; 8 − Вывод |
153 |
|
PUSH ES |
; записываем в стек регистры |
154 |
|
PUSH BX |
|
|
155 |
|
|
|
|
156 |
|
MOV AX, ES: [BX].RH8_BUF_SEG ; получаем сегмент записываемого значения |
157 |
|
MOV BX, ES: [BX].RH8_BUF_OFS ; получаем смещение записываемого значения |
158 |
|
MOV ES, AX |
|
159 |
|
MOV DL, ES:[BX] |
; кладем в DL символ для записи |
160 |
|
MOV DI, OFFSET BUFF |
; записываем в буфер |
161 |
|
ADD DI, COUNT ; смещение от начала на количество записанных символов |
162 |
|
MOV [DI], DL |
; пишем в буфер |
163 |
|
INC COUNT |
; инкрементируем счетчик. |
164 |
|
|
|
|
165 |
|
POP BX |
|
; Возвращаем регистры в исходное состояние |
166 |
|
POP ES |
|
|
167 |
|
JMP |
SUCCESS_EXIT |
|
|
|
|
|
|
|
|
|
|
|
А COUNT определим в области данных, изменив значение буфера для дальнейшей
проверки:
|
|
|
|
|
152 |
;******************************************************************************* |
153 |
; |
Область данных драйвера |
154 |
;******************************************************************************* |
155 |
|
RH_OFF |
DW |
? |
156 |
|
RH_SEG |
DW |
? |
157 |
|
MSG |
DB |
'THIS IS DOS−DRIVER' |
158 |
|
|
DB |
0DH,0AH,07H,'$' |
159 |
|
BUFF |
DB |
0,0,0,0,0 ;Тестовый буфер |
160 |
|
COUNT |
Dw |
0 |
|
|
|
|
|
|
|
|
|
|
2.4.2.
Дополним драйвер данной командой. Перекомпилировав, обнаружим, что адреса из-
менились (Рис. 2.20). Изменим соответствующим образом точки останова и запустим программу.
Рис. 2.20. Новые адреса.
Отследим изменение в окне m1 при вызове соответсвующий процедуры (8, см в окне m2 по аналогии с предыдущими пунктами), Рис. 2.21 - 2.25
Рис. 2.21. Запись 1.