![]() |
|
![]() ![]() ![]() |
|
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
В общем такая ситуация. Есть программа под DOS, в которой есть такие строки:
9 - код горизонтальной табуляции (\t) этот код нужен был именно для вывода двух табуляций, т.е. смещения курсора на сколько-то вправо. Однако во время отладки с какого-то момента вместо табуляций этими строками стали выводиться символы о (круглешок в кодировке ASCII - символ с кодом 09h). В этом месте ничего не менялось. Как вернуть назад непонятно. В каком случае символ берется из таблицы ASCII, а когда воспринимается как управляющий символ ASCII? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
ksili, отсюда мораль -- зачем выводить при помощи 29h прерывания по одному символу, когда есть 9-ая функция 21h прерывания, которая выводит сразу строку символов?
|
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Ну и где гарантия, что 21h поведёт себя не так же как 29h?
Вопрос вообще не в количестве выводимых символов. Допустим выводился бы один символ (одна табуляция), что тогда? Кстати int 21h выводит выводит вот эти самые кружочки и улыбки, а не управляющие символы - проверено. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
ksili, у меня под WinXP все нормально выводит, с табуляцией, переводом строк и никаких "рожиц"
|
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Я конечно рад за тебя,
но представь на минуту, что тебе понадобилось вывести "рожицу"... Что у тебя выведет этот код?
Я имею в виду прогу под DOS, но запускаемую в винде, в консоли. Это сообщение отредактировал(а) ksili - 17.11.2008, 10:10 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Сказки. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Akina, как бы ты вывел какую-нибудь "рожицу" (скажем с кодом 00h или 01h)? Хотите сказать, что эти символы есть, но их нельзя вывести?
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 1 Всего: 454 |
Ну почему? вывести - запросто. Я говорю о том, что Int21h/fn9 гарантированно интерпретирует db 9 как табуляцию, и никаких рож вмместо неё выводить не станет.
Использовал бы int10/fn9 или int21/fn2 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
ksili, под DOS, но запускаемую в винде, в консоли ничего не выводит
![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Вот наконец-то вроде бы ответ на мой вопрос. Насколько я понял, одни функции/прерывания втыкают управляющие символы, а другие работают чисто с ASCII-таблицей. А тот косяк пожалуй можно списать на недокументированность прерывания 29h. Добавлено @ 10:38
сейчас под рукой ассемблера нету. Домой приду, попробую и скину сюда код. Это сообщение отредактировал(а) ksili - 17.11.2008, 11:27 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
ksili, Прерывание 29h Быстрый вывод на консоль. Назначение: обеспечивает более простое и быстрое средство вывода одного символа, чем обычный вызов драйвера устройства CON. Применеие DOS 2.0 и выше. Ограничения текущий драйвер консоли должен уметь устанавленный бит 4 атрибута. Регистры при вызове AL = символ для отображения. Регистры при возврате не используются. подробности COMMAND.COM v3.2 и v3.3 сравнивают векторы int 29h и int 20h и предполагает, что ANSI.SYS установлен, если сегментый адрес у int 29h больше. По умолчанию, обработчик int 29h просто вызывает функцию 0Eh прерывания 10h
![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
И что? раз говорится о действиях по-умолчанию, значит могут быть и другие варианты...
К тому же какая версия COMMAND.COM в WinXP? Я не знаю... -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
ksili, посмотри под деббагером (OllyDebug, SoftIce и т.п.), ЧТО происходит, когда ты входишь внутрь int 29h
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |