1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
| Rocket |
5.10.2008 0:11
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Вот задание: Ввести с клавиатуры две строки. Сравнить их. Вывести на экран какая из строк больше и насколько. Какие мысли есть по реализации данной программы? Как осуществить сравнение строк?
|
![]() ![]() |
| volvo |
7.12.2008 12:24
Сообщение
#2
|
|
Гость |
Цитата А вот как организовать подпрограмму поиска одной введённой строки в другой строке? И ещё: вывод позиции, с которой подстрока содержится в строке... Вот тебе программа, которая это делает... В виде подпрограммы оформляй сам:MODEL small(процедуру writeDEC возьми из предыдущих постов, я не стал ее опять копировать...) |
| Rocket |
9.12.2008 0:36
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Вот тебе программа, которая это делает... У меня возник ряд вопросов по реализации... 1) Использование "offset". Я так полагаю, что это полный аналог команды "lea" ? 2) inpStrDat что это за переменная, для чего она нужна? 3) mov di, offset inpStrDatчто делает конструкция такого вида? 4) Как определяется размер строки? т.е. mov cl, inpStrLenпочему в cl сразу помещается размер строки? 5) При переходе на метку beginCompare:, где мы должны проверять последующие за первой буквы, мы снова проверяем совпадение первых букв, так ли это? 6) Когда мы из стека вытаскиваем di, разве он сразу не указывает на позицию, с которой начинается подстрока в строке? Как вообще происходит тогда вычисление позиции? Сообщение отредактировано: volvo - 14.01.2009 0:28 |
| volvo |
9.12.2008 1:08
Сообщение
#4
|
|
Гость |
1) Использование "offset". Я так полагаю, что это полный аналог команды "lea" ? Правильно полагаешь... ; можно вот так получить смещение inpStrDatВ обоих случаях смещение этого массива от начала сегмента будет занесено в регистр DI... 2) inpStrDat что это за переменная, для чего она нужна? Как это "для чего"? А строку ты что, в воздухе хранить будешь? Вообще-то для нее надо место выделять. Вот я и выделил 200 байт.Вообще обрати внимание, для ввода строки используется функция 0AH прерывания 21H... А она требует для работы вот чего: Цитата(Абель) LABEL представляет собой директиву с атрибутом BYTE. Первый байт содержит максимальную длину вводимых данных. Так как это однобайтовое поле, то возможное максимальное значение его - FFh или 255. Второй байт необходим DOS для занесения в него действительного числа введенных символов. Третьим байтом начинается поле, которое будет содержать введенные символы. Вот так... А поскольку я не описывал LABEL (ленивый я, не люблю набирать лишние символы NAMEPAR LABEL BYTE ; Список параметров: Так как в списке параметров директива LABEL не занимает места, то NAMEPAR и MAXLEN указывают на один и тот же aдрес памяти. В трансляторе MASM для определения списка параметров в виде структуры может использоваться также директива STRUC. Однако, в связи с тем, что ссылки на имена, определенные внутри, требуют специальной адресации, воздержимся cейчас от рассмотрения данной темы до гл. 24 "Директивы ассемблера". Для запроса на ввод необходимо поместить в регистр AH номер функции - 10 (шест. 0Ah), загрузить адрес списка параметров (NAMEPAR в нашем примере) в регистр DX и выполнить INT 21H Я надеюсь, вопрос 4) Как определяется размер строки? т.е.
исчерпан? Я там, в цитате, выделил ответ на него...mov cl, inpStrLenпочему в cl сразу помещается размер строки? 5) При переходе на метку
Так, но почему тебя это пугает? Я же уменьшаю DI перед проверкой, то есть, DI указывает именно на первый, совпавший символ в строке...beginCompare:, где мы должны проверять последующие за первой буквы, мы снова проверяем совпадение первых букв, так ли это? 6) Когда мы из стека вытаскиваем di, разве он сразу не указывает на позицию, с которой начинается подстрока в строке? Как вообще происходит тогда вычисление позиции? Нет, он указывает на смещение относительно начала сегмента... А для того, чтобы вычислить позицию, надо из этого самого смещения, которое хранится в DI, вычесть смещение первого символа строки, которое я и заношу в DX... После вычитания в AX имеем позицию подстроки в строке... |
Rocket Обработка символьной информации 5.10.2008 0:11
мисс_граффити Что значит "строка больше"? По длине? 6.10.2008 19:22
Rocket
Что значит "строка больше"? По длине?
... 6.10.2008 20:28
Lapp Та по длине походу... сравнивать количество символ... 6.10.2008 23:02
Rocket
При чем тут загадка? Не понимаю. Если по длине,... 6.10.2008 23:23
Lapp В ассемблере есть функция length(s)?...в мои позн... 6.10.2008 23:29
мисс_граффити Ввод строк сделал? Проблемы только с определением ... 7.10.2008 14:37
Rocket
Ввод строк сделал? Проблемы только с определением... 7.10.2008 17:09
мисс_граффити Ну например...
.model small
.stack 512
.data
buf1 ... 7.10.2008 20:26
Rocket Ну например...
всё отлично, большое спасибо) вот т... 8.10.2008 23:38
мисс_граффити У меня работает все.
Да ты по сути ничего в этой с... 8.10.2008 23:54
Rocket
У меня работает все.
Да ты по сути ничего в этой ... 9.10.2008 23:21
volvo Rocket,
Чем компилируешь, если не секрет?
Приведе... 9.10.2008 23:43
Rocket
Rocket,
Чем компилируешь, если не секрет?
Привед... 10.10.2008 21:31
volvo А может, ты его просто не видишь? :wink: Alt+F5 н... 10.10.2008 21:51
Rocket
А может, ты его просто не видишь? :wink: Alt+F5 ... 10.10.2008 22:01
Rocket Всё-таки как организовать вывод сообщеия о том нас... 13.11.2008 1:20
volvo Ну, и кто тебе сказал, что
lea dx, X
преобразует т... 13.11.2008 2:18
Rocket А если у нас не 10 символом максимальный размер, а... 27.11.2008 22:31
volvo Значит, придется написать процедуру вывода десятич... 27.11.2008 23:12
Rocket Значит, придется написать процедуру вывода десятич... 28.11.2008 0:02
volvo Комментарии добавлены в предыдущее сообщение... 28.11.2008 1:10
Rocket
Комментарии добавлены в предыдущее сообщение...
... 4.12.2008 23:25
Rocket Всё стало на свои места! Спасибо:)
Так, вот ещ... 10.12.2008 0:24
volvo 1) процедура show_ax для чего предназначена? мы в... 10.12.2008 0:46
Rocket
Да, скорее всего надо в процедуре получать через ... 10.12.2008 12:42
volvo А я переделал вот так:
findSStr proc
; Ищем первы... 10.12.2008 13:09
Rocket Вот последняя вариация программы:
data segment
en... 10.12.2008 23:20
volvo Нет... Проблема не тут. Замени вот эти 2 строки:
... 10.12.2008 23:56
Rocket
Нет... Проблема не тут. Замени вот эти 2 строки:
... 11.12.2008 0:42
volvo Ты просто забыл кое что (например, очистить AX пер... 11.12.2008 1:39
Rocket Ты просто забыл кое что (например, очистить AX пер... 11.12.2008 22:40![]() ![]() |
|
Текстовая версия | 28.10.2025 2:49 |