Вопрос № 157751: Здравствуйте, эксперты, может кто встречал такое: <div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height: 100px; text-align: left; ov...
Вопрос № 157760: Эксперты помогите написать программу типа com к заданию: Дан массив из десяти знаковых чисел(слов и байт).Требуеться:
заменить все отрицательные числа нулями. Массив байт....Вопрос № 157817: Здравствуйте уважаемые эксперты!!! Я недавно начал изучать ассемблер по книге Калашникова и эксперементировал с программами ( листинг 1.2 и 2.5). Суть в том , что я удалил из обоих программ прерывание int 20h и ничего не изменилось, т.е программы как...Вопрос № 157833: Здравствуйте! Вопрос по книге Калаш
никова. В листинге 10.4 мы писали программу, которая перехватывал прерывание 21h. Объясните пожалуйста подробно, для чего в обработчике мы заносим в стек регистры: push ds, push dx, push cs После по...
Вопрос № 157.751
Здравствуйте, эксперты, может кто встречал такое:
Код:
mov ah,2 mov dl,7 int 21h
или
Код:
mov ax,0e07h int 10h
должен выдавать сигнал на динамик, но не работает в простой линейной программе, для примера
Код:
.model small ; модель пямяти для программы типа EXE .stack 100h
; сегмент стека .data ; сегмент данных .code ; сегмент кода @start: ; точка входа в программу mov ax,@data; инициализация семента данных mov es,ax mov ds,ax mov ax,0200h mov dx,2 int 21h mov ax,0e07h ;вывести символ с кодом - 7 звонок int 10h ;выход из программы mov ax,4c00h ; функция DOS завершение программы int 21h ; вызов DOS end @start
но если я перехватываю прерывание таймера 1Ch, в нем выполняю такой код, то все
прекрасно работает
Отправлен: 15.01.2009, 11:16
Вопрос задал: Airyashov (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 8)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Airyashov! Приведенная программа тоже прекрасно работает :) Только надо вставить в конце ожидание нажатия на клавишу, а еще лучше зациклить: выводить код beep-а, пока не ESC Дело в том, что программа просто не успевает пропищать, в силу инерционности виртуальной машины ДОС-а под ХР, как тут же завершается "молча" :)
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 15.01.2009, 11:35
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 241254 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Вопрос № 157.760
Эксперты помогите написать программу типа com к заданию: Дан массив из десяти знаковых чисел(слов и байт).Требуеться: заменить все отрицательные числа нулями. Массив байт.
Отвечает: Airyashov
Здравствуйте, Грязнева Ольга Михайловна!
Код:
mov si,9 next: mov al,massiv[si] test al,al jns neotr mov byte ptr massiv[si],0 neotr: dec si jns next
Ответ отправил: Airyashov (статус: Студент)
Ответ отправлен: 15.01.2009, 13:21
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 241268 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 157.817
Здравствуйте уважаемые эксперты!!! Я недавно начал изучать ассемблер по книге Калашникова и эксперементировал с программами ( листинг 1.2 и 2.5). Суть в том , что я удалил из обоих программ прерывание int 20h и ничего не изменилось, т.е программы как работали так и работают!! Прошу Вас обьяснить мне (доступно ) для чего нужно это прерывание и почему у меня программы работают без него.
Отправлен: 15.01.2009, 21:51
Вопрос задал: Sergey1966 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Sergey1966! int 20h используется для выхода из программы и возврата управления вызвавшей программе (обычно командному интепретатору) Полностью эквивалентна командам mov ah,0 int 21h Особенностью этой команды является то, что она требует, чтобы регистр CS указывал на сегмент PSP. Т.о. эта команда приспособлена для программ модели TINY, т.е. формата COM. Команды mov ah, 4ch int 21h являются более универсальным способом выхода из программы, в этом
случае не требуется совпадение CS=PSP Замечу, иногда программы завершаются кодом ret (длинным или коротким), при этом предполагается, что происходит возврат на адрес PSP:0, где, кстати, записана команда int 20h, которая и завершает программу.
Далее, что происходит, если мы уберем int 20h? Нормального завершения, естественно не произойдет. Программа "пойдет" дальше отрабатывать все, что встретит на своем пути! Наверняка, встретит код
, который не соответствует никакой команде! Произойдет исключение, в результате которого система просто-напросто "прибивает" Вашу программу! Должна же система как-то защищаться в подобной ситуации :)
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 16.01.2009, 09:29
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 241337 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 157.833
Здравствуйте! Вопрос по книге Калашникова. В листинге 10.4 мы писали программу, которая перехватывал прерывание 21h. Объясните пожалуйста подробно, для чего в обработчике мы заносим в стек регистры: push ds, push dx, push cs После по правилам нужно вытягивать все в обратном порядке, но мы сначала пишем Pop ds, почему??
Приложение:
Отправлен: 16.01.2009, 01:07
Вопрос задал: Loginleon (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Loginleon! Все очень просто. Первыми двумя push-ами Push ds Push dx мы действительно сохраняем в стеке ds и dx А вот следующими двумя строками Push cs ;адрес строки должен быть в ds:dx Pop ds мы заносим в ds значение из cs, т.о. ds становится равным cs
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 16.01.2009, 01:34
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 241327 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.