Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Когда используется спец. символ, а не обычный? 
:(
    Опции темы
ksili
Дата 15.11.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



В общем такая ситуация. Есть программа под DOS, в которой есть такие строки:
Код

mov al, 9
int 29h
int 29h

9 - код горизонтальной табуляции (\t)
этот код нужен был именно для вывода двух табуляций, т.е. смещения курсора на сколько-то вправо.
Однако во время отладки с какого-то момента вместо табуляций этими строками стали выводиться символы о (круглешок в кодировке ASCII - символ с кодом 09h). 
В этом месте ничего не менялось. Как вернуть назад непонятно. 
В каком случае символ берется из таблицы ASCII, а когда воспринимается как управляющий символ ASCII?



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mikl_
Дата 17.11.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



ksili, отсюда мораль -- зачем выводить при помощи 29h прерывания по одному символу, когда есть 9-ая функция 21h прерывания, которая выводит сразу строку символов?
Код
mov ah,9
    mov dx,offset Hello; строка с текстом, двумя табуляциями и переводом строки
    int 21h
    ret
Hello    db 'Hello, cruel'9,9,10,' world from MASM!$'

PM MAIL   Вверх
ksili
Дата 17.11.2008, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Ну и где гарантия, что 21h поведёт себя не так же как 29h? 
Вопрос вообще не в количестве выводимых символов. Допустим выводился бы один символ (одна табуляция), что тогда?

Кстати int 21h выводит выводит вот эти самые кружочки и улыбки, а не управляющие символы - проверено.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mikl_
Дата 17.11.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



ksili, у меня под WinXP все нормально выводит, с табуляцией, переводом строк и никаких "рожиц"
PM MAIL   Вверх
ksili
Дата 17.11.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Я конечно рад за тебя, 
но представь на минуту, что тебе понадобилось вывести "рожицу"...

Что у тебя выведет этот код?
Код

msg db ?,'$'

...

mov msg, 0
lea dx, msg
mov ah, 9
int 21h

Я имею в виду прогу под  DOS, но запускаемую в винде, в консоли.

Это сообщение отредактировал(а) ksili - 17.11.2008, 10:10


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akina
Дата 17.11.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(ksili @  17.11.2008,  07:35 Найти цитируемый пост)
Кстати int 21h выводит выводит вот эти самые кружочки и улыбки, а не управляющие символы - проверено.

Сказки.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksili
Дата 17.11.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Akina, как бы ты вывел какую-нибудь "рожицу" (скажем с кодом 00h или 01h)? Хотите сказать, что эти символы есть, но их нельзя вывести?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akina
Дата 17.11.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(ksili @  17.11.2008,  11:12 Найти цитируемый пост)
Хотите сказать, что эти символы есть, но их нельзя вывести?

Ну почему? вывести - запросто. 
Я говорю о том, что Int21h/fn9 гарантированно интерпретирует db 9 как табуляцию, и никаких рож вмместо неё выводить не станет.
Цитата(ksili @  17.11.2008,  11:12 Найти цитируемый пост)
как бы ты вывел какую-нибудь "рожицу" (скажем с кодом 00h или 01h)?

Использовал бы int10/fn9 или int21/fn2 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mikl_
Дата 17.11.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



ksili, под  DOS, но запускаемую в винде, в консоли ничего не выводит  smile 
PM MAIL   Вверх
ksili
Дата 17.11.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(Akina @ 17.11.2008,  14:28)
Цитата(ksili @  17.11.2008,  11:12 Найти цитируемый пост)
Хотите сказать, что эти символы есть, но их нельзя вывести?

Ну почему? вывести - запросто. 
Я говорю о том, что Int21h/fn9 гарантированно интерпретирует db 9 как табуляцию, и никаких рож вмместо неё выводить не станет.
Цитата(ksili @  17.11.2008,  11:12 Найти цитируемый пост)
как бы ты вывел какую-нибудь "рожицу" (скажем с кодом 00h или 01h)?

Использовал бы int10/fn9 или int21/fn2

Вот наконец-то вроде бы ответ на мой вопрос. Насколько я понял, одни функции/прерывания втыкают управляющие символы, а другие работают чисто с ASCII-таблицей. 

А тот косяк пожалуй можно списать на недокументированность прерывания 29h.

Добавлено @ 10:38
Цитата(Mikl_ @  17.11.2008,  14:33 Найти цитируемый пост)
ksili, под  DOS, но запускаемую в винде, в консоли ничего не выводит 

сейчас под рукой ассемблера нету. Домой приду, попробую и скину сюда код.

Это сообщение отредактировал(а) ksili - 17.11.2008, 11:27


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mikl_
Дата 17.11.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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  smile 
PM MAIL   Вверх
ksili
Дата 17.11.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



И что? раз говорится о действиях по-умолчанию, значит могут быть и другие варианты...
К тому же какая версия COMMAND.COM в WinXP? Я не знаю...


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Mikl_
Дата 17.11.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



ksili, посмотри под деббагером (OllyDebug, SoftIce и т.п.), ЧТО происходит, когда ты входишь внутрь int 29h 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.