Вопрос № 102136:
Здравствуйте, уважаемые эксперты. У меня 2 вопроса, связанные с процедурой вывода символов на экран Out_char proc программы Prog07. Собственно, этот вывод символов даётся автором с 3-ей главы, в Prog07 нужно лишь добавить заталкивание содержимог...
Вопрос № 102.136
Здравствуйте, уважаемые эксперты. У меня 2 вопроса, связанные с процедурой вывода символов на экран Out_char proc программы Prog07. Собственно, этот вывод символов даётся автором с 3-ей главы, в Prog07 нужно лишь добавить заталкивание содержимого регистра ax, (в котором код нажатой клавиши ) в стек. Однако, автор делает что-то хитрое: сначала в стек помещается содержимое регистра сх, потом ах, далее es и !!! опять ах. С какой целью в стек дважды помещается содержимое регистра ах? Зачем в стек нужно помещать
содержимое регистров сх, es, ведь в предыдущих программах Prog3 – Prog6 в стек не помещалось содержание этих регистров. С моей точки зрения, правильным было бы в стек поместить только содержимое регистра ах и только один раз. Кстати, в этом случае программа нормально работает.
Второй вопрос: в предыдущих программах Prog3 – Prog6 сначала в регистр ах заносился атрибут символа, а только потом код символа. В Prog07, наоборот, сначала из стека вытаскивается код нажатой клавиши pop ax (там нерасширенный код, т.е. занят лишь регистр al), и только потом командой mov ah,31 заносится атрибут символа. Я решил поменять местами эти команды, т.е. сначала выполнялась бы строка (12) mov ah,31, потом (11) pop ax. Программа работала, но при этом цвет при каждой нажатой клавиши менялся. Вот почему
он меняется при перестановке этих команд. Думаю, что атрибут символа меняется на 1, поэтому и цвет разный, но в процедуре я не могу найти этого увеличения. Заранее спасибо.
Приложение:
Отправлен: 15.09.2007, 15:40
Вопрос задал: Masada (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Волков Павел Юрьевич
Здравствуйте, Masada!
По первому вопросу, действительно можно ограничиться сохранением только содержимого AX.
Думаю, автор этим хотел показать только на использование этих регистров в подпрограмме, выполнил предупредительное сохранение :)
Изменение местами команд pop AX и mov AH,31 влияет на содержимое AH, размещение pop после mov замещает содержимое AH, в нем находиться значение скан-кода, возвращенного 10h функцией 16h прерывания.
Пример:
pop ax
mov ah,31
;AH - необходимые аттрибуты
mov ah,31
pop ax
;AH - скан-код, оставшийся после вызова функции 10h прерывания 16h
--------- Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: Студент)
Ответ отправлен: 15.09.2007, 18:32 Оценка за ответ: 5