Обработка символьной информации, с помощью функций DOS |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Обработка символьной информации, с помощью функций DOS |
Rocket |
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Вот задание: Ввести с клавиатуры две строки. Сравнить их. Вывести на экран какая из строк больше и насколько. Какие мысли есть по реализации данной программы? Как осуществить сравнение строк?
|
мисс_граффити |
Сообщение
#2
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Что значит "строка больше"? По длине?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Rocket |
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
|
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Та по длине походу... сравнивать количество символов...как реализовать- до сих пор загадка.. При чем тут загадка? Не понимаю. Если по длине, то функция Length(s) решает все проблемы. Но если требуется все-таки лексикографическое сравнение, то тогда действительно загадка. То есть само сравнение будет еще проще (типа s1<s2), но совершенно непонятно, что значит "на сколько" [орфография моя]. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Rocket |
Сообщение
#5
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
При чем тут загадка? Не понимаю. Если по длине, то функция Length(s) решает все проблемы. Но если требуется все-таки лексикографическое сравнение, то тогда действительно загадка. То есть само сравнение будет еще проще (типа s1<s2), но совершенно непонятно, что значит "на сколько" [орфография моя]. В ассемблере есть функция length(s)?...в мои познания этого языка данная функция ещё не входит... |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
В ассемблере есть функция length(s)?...в мои познания этого языка данная функция ещё не входит... Упс! погорячился... )) Прошу прощения!А как организаешь строки? Паскалевсие или нуль-терминированные? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
мисс_граффити |
Сообщение
#7
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Ввод строк сделал? Проблемы только с определением длины?
Могу попробовать вечером набросать код... но неохота тупо выкладывать готовую работу. Lapp, что значит "паскалевские строки" применительно к асму? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Rocket |
Сообщение
#8
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Ввод строк сделал? Проблемы только с определением длины? Могу попробовать вечером набросать код... но неохота тупо выкладывать готовую работу. Lapp, что значит "паскалевские строки" применительно к асму? Не большой пример про ввод строки я видел, выглядит примерно вот так: buffer db 11 ; Нулевой байт буфера Сам ввод выполняется командами:
Что изменится при вводе двух строк? А набросанный код пришёлся бы очень кстати) всё равно и в нём нужно будет разобраться |
мисс_граффити |
Сообщение
#9
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Ну например...
.model small Длина строк маленькая (см. объявление переменных). НА СКОЛЬКО они отличаются - не считаю (думаю, с арифм операциями как-нибудь разберешься). Вариант равенства длин не предусмотрен. Ну и косяки могут быть - ассемблер я не знаю практически. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Rocket |
Сообщение
#10
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Ну например... всё отлично, большое спасибо) вот только вывод сообщения отказывается работать... Я вот так немного переделал:
Сообщение отредактировано: volvo - |
мисс_граффити |
Сообщение
#11
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
У меня работает все.
Да ты по сути ничего в этой сфере вроде и не изменил. Строки местами поменял - и все? Если assume написал - убери mov AX, data оно у тебя уже делается. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Rocket |
Сообщение
#12
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
|
volvo |
Сообщение
#13
|
Гость |
Rocket,
Чем компилируешь, если не секрет? Приведенный тобой в 10-м сообщении код прекрасно отрабатывает после сборки ДОСовским TASM-ом версии 3.0... Отладчиком не смотрел, на каком этапе у тебя проблема? |
Rocket |
Сообщение
#14
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Rocket, Чем компилируешь, если не секрет? Приведенный тобой в 10-м сообщении код прекрасно отрабатывает после сборки ДОСовским TASM-ом версии 3.0... Отладчиком не смотрел, на каком этапе у тебя проблема? Проблема в том, что не выводит сообщение в Turbo Debugger'е (версия 3.1). Tasm у меня версии 1.0... |
volvo |
Сообщение
#15
|
Гость |
Цитата Проблема в том, что не выводит сообщение в Turbo Debugger'е (версия 3.1) А может, ты его просто не видишь? Alt+F5 не пробовал для просмотра результатов? Ну, или View -> User Screen... |
Rocket |
Сообщение
#16
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
|
Rocket |
Сообщение
#17
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Всё-таки как организовать вывод сообщеия о том насколько отличаются строки?
Вот как я делаю:
|
volvo |
Сообщение
#18
|
Гость |
Ну, и кто тебе сказал, что
lea dx, X преобразует тебе число в его символьное представление? Функция 02H прерывания 21H ведь выводит символ, код которого хранится в DX, а у тебя в DX что хранится? Убери из сегмента данных X, и добавь вместо него len2... lea dx, buf1 ;куда считываем первую строку символов |
Rocket |
Сообщение
#19
|
Знаток Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
А если у нас не 10 символом максимальный размер, а 100, то как тогда вывести разность длин строк? (то есть проблема с выводом двузначного числа,к примеру)
И функция 3Fh, что она делает? Сообщение отредактировано: volvo - |
volvo |
Сообщение
#20
|
Гость |
Значит, придется написать процедуру вывода десятичного числа:
, и вызывать вот так: ; ... Цитата И функция 3Fh, что она делает? Ну ты даешь... Я что-ли эту функцию придумал использовать? Ты сам в своей программе ее применял, а теперь спрашиваешь... Она вводит с клавиатуры строку (максимально возможную длину строки надо занести в CX), и помещает ее в буфер (адрес буфера - в DX).Сообщение отредактировано: volvo - |
Текстовая версия | 23.12.2024 16:12 |