Вопрос № 34706: Здравствуйте.
После инструкции: db 0FFFFh dup ('*') один байт в
буфере остается пустым, а после добавления db '*' tasm выдает
предупреждение переполнения. Так как одной командой заполнить
весь буфер.
alexei_s@pop3....Вопрос № 34717: Здравствуйте уважаемые эксперты!
Как мне узнать адреса прерываний, точнее где эти прерывания лежат?
Например я знаю что прерывание 10h лежит в DS (сегменте данных) в этой ячейке 40h, а прерывание 21h, лежит в 51h ячейке. Так ли это? ...
Вопрос № 34.706
Здравствуйте.
После инструкции: db 0FFFFh dup ('*') один байт в
буфере остается пустым, а после добавления db '*' tasm выдает
предупреждение переполнения. Так как одной командой заполнить
весь буфер.
Отвечает: Евгений Иванов
Здравствуйте, Семенов Алексей Николаевич!
какой это весь буфер? что вы имеете в виду?
размер сегмента 64 Кб, а это 65536 байтов.
поэтому выделить память такого размера - для этого нужно создать отдельный сегмент. а он пишет, что переполнение, потому что там уже что-то находится.
Лучше используй функцию выделения памяти 48h.
удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 04.02.2006, 12:24
Вопрос № 34.717
Здравствуйте уважаемые эксперты!
Как мне узнать адреса прерываний, точнее где эти прерывания лежат?
Например я знаю что прерывание 10h лежит в DS (сегменте данных) в этой ячейке 40h, а прерывание 21h, лежит в 51h ячейке. Так ли это?
Отправлен: 04.02.2006, 13:30
Вопрос задал: Minigun (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: EPDSota
Здравствуйте, Minigun!
дальний адрес прерывания= двойное слово по адресу (номер прерывания *4)...
то есть для прерывания 21h это будет:
push 0
pop gs;gs=сегмент таблицы прерываний
mov ax,gs:[21h*4+2]
mov es,ax
mov bx,gs:[21h*4]
;теперь es:bx - указывает на прерывание 21h
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Практикант)
Отправлен: 04.02.2006, 14:12 Оценка за ответ: 5 Комментарий оценки: Спасибо, теперь все ясно.
Отвечает: skif quest
Здравствуйте, Minigun!
"на расположение их указывает 4 байта по адресу получаемому таким образом: 4*N где N -номер прерывания. Это значит что адрес 21h -го прерывания лежит в 84h-88h ячейках памяти. "
А вот сам код прерываний может быть где угодно в пределах доступной памяти.
Ответ отправил: skif quest (статус: 1-ый класс)
Отправлен: 06.02.2006, 08:21 Оценка за ответ: 4 Комментарий оценки: Верно, я умножил 21 на 4 и получил 84. но скорее всего 84h+1, а не + 4, так как в каждой ячейки итак 4 байта. А вот сам код, лежит в 50-51 ячейке, по смещению d ds:50, это 21-го прерывания.