IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Обработка символьной информации, с помощью функций DOS
Rocket
сообщение 5.10.2008 0:11
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вот задание: Ввести с клавиатуры две строки. Сравнить их. Вывести на экран какая из строк больше и насколько. Какие мысли есть по реализации данной программы? Как осуществить сравнение строк?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 10.12.2008 23:56
Сообщение #2


Гость






Цитата
Мне кажется, что не происходит вот это:

xor ax, ax; не найдено, вернем 0
; Если цикл FindFirstCh закончился - значит подстроки нет
jmp exit_proc
Нет... Проблема не тут. Замени вот эти 2 строки:
	test ax, 0
jnz not_found

на
	or ax, ax
jz not_found
и проверь...
 К началу страницы 
+ Ответить 
Rocket
сообщение 11.12.2008 0:42
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 10.12.2008 23:56) *

Нет... Проблема не тут. Замени вот эти 2 строки:
	test ax, 0
jnz not_found

на
	or ax, ax
jz not_found
и проверь...

Идельно! Всё работает! Недеюсь больше по этой программе вопросов не возникнет)

Я решил в первой программе, которая определяла какая из двух строк больше и насколько, решил изменить функцию ввода с 3Fh на 0ah, я же теперь знаю особенности этой функции в отличии от функции 3Fh...
Всё бы ничего, только вот вывод цифры отказывается работать...
Вот собственно сама переделанная программа:

data segment
inpStr1 db 100
inpStrLen1 db ?
inpStrDat1 db 100 dup(?)
inpStr2 db 100
inpStrLen2 db ?
inpStrDat2 db 100 dup(?)

mes1 db 13, 10, 'First is longer!$'
mes2 db 13, 10, 'Second is longer!$'
mes3 db 13, 10, 'Enter the first string: $'
mes4 db 13, 10, 'Enter the second string: $'
outstr db 13, 10, '$'
count_of_digits dw 2
data ends

code segment
assume cs:code, ds:data

start: mov AX, data
mov DS, AX

lea dx,mes3
mov ah,09h
int 21h
lea dx,inpStr1
mov ah,0ah
int 21h


lea dx,mes4
mov ah,09h
int 21h
lea dx,inpStr2
mov ah,0ah
int 21h

xor cx,cx
mov cl,inpStrLen2

cmp cl, inpStrLen1
jge m2

xor cx,cx
mov cl,inpStrLen1
sub cl,inpStrLen2
mov al, cl

call writeDEC

lea dx,mes1
mov ah,09h
int 21h

jmp finish

m2:

xor cx,cx
mov cl,inpStrLen1
sub cl,inpStrLen2
mov al,cl

call writeDEC



lea dx,mes2
mov ah,09h
int 21h


finish: mov ax,4c00h
int 21h

writeDEC proc

push ax
push bx
push cx
push dx

xor cx, cx
mov bx, 10

next_digit:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz next_digit

next_char:
pop ax
add al, '0'
int 29h
loop next_char

pop dx
pop cx
pop bx
pop ax
ret
writeDEC endp

code ends
end start


по-видимому, что-то с регистрами напутал...или стек?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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
volvo   Вот тебе программа, которая это делает... В виде п...   7.12.2008 12:24
Rocket   Вот тебе программа, которая это делает... У меня ...   9.12.2008 0:36
volvo   1) Использование "offset". Я так полага...   9.12.2008 1:08
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


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 3.07.2025 16:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"