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

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

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

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


Знаток
****

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

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


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


Гость






Значит, придется написать процедуру вывода десятичного числа:


; В сегменте данных:
count_of_digits dw 4 ; число будет отображаться в четырех позициях
; ...

writeDEC proc
; выводим содержимое AX
push ax
push bx
push cx
push dx

push di ; здесь будем хранить признак знака
xor cx, cx
mov bx, 10
xor di, di ; 0 = число положительное
or ax, ax ; Проверим, не отрицательное ли число в AX
jns next_digit ; Не отрицательное... Переходим дальше
inc di ; Отрицательное. Выставляем DI в 1 (число отрицательное) ...
neg ax ; ... и меняем знак числа

next_digit:
xor dx, dx ; DX обнуляется. Чтобы можно было делить DWORD на WORD
div bx ; Делмм DX:AX на BX (т.е. на 10) ...
push dx ; ... остаток забрасываем в стек ...
inc cx ; Увеличим счетчик цифр
or ax, ax
jnz next_digit ; ... и продолжаем этот цикл пока AX <> 0

mov dx, count_of_digits
sub dx, cx ; вычисляем, сколько пробелов надо вывести перед числом
or di, di
jz _zer
dec dx ; если ранее был установлен "признак отрицательности"
; то уменьшаем число пробелов еще на 1, поскульку надо еще вывести "-"
_zer:
push cx ; сохраним число цифр в стеке
mov cx, dx
mov al, ' ' ; и напечатаем необходимое число пробелов
next_space:
int 29h ; прерывание 29h - вывод на консоль
loop next_space

pop cx ; вернем число цифр
or di, di
jz next_char
mov al, '-'
int 29h ; если нужен минус - выводим его

next_char:
pop ax ; остатки от деления возвращаем в AX
add al, '0' ; преобразуем в символ (добавляя код '0')
int 29h ; и выводим на консоль
loop next_char

pop di ; восстанавливаем все регистры
pop dx
pop cx
pop bx
pop ax
ret ; и выходим из процедуры
writeDEC endp

, и вызывать вот так:
	; ...
mov ax, len1
sub ax, len2
call writeDEC ; печатаем разность

lea dx, mes1
mov ah, 09h ; выводим сообщение, что первая строка длиннее
int 21h

jmp finish ; на выход

m2:
mov ax, len2
sub ax, len1
call writeDEC ; печатаем разность

lea dx, mes2
mov ah,09h ; выводим сообщение, что длиннее вторая строка
int 21h

finish:
; ...


Цитата
И функция 3Fh, что она делает?
Ну ты даешь... smile.gif Я что-ли эту функцию придумал использовать? Ты сам в своей программе ее применял, а теперь спрашиваешь... Она вводит с клавиатуры строку (максимально возможную длину строки надо занести в CX), и помещает ее в буфер (адрес буфера - в DX).

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   Обработка символьной информации   5.10.2008 4:11
мисс_граффити   Что значит "строка больше"? По длине?   6.10.2008 23:22
Rocket   Что значит "строка больше"? По длине? …   7.10.2008 0:28
Lapp   Та по длине походу... сравнивать количество символ…   7.10.2008 3:02
Rocket   При чем тут загадка? Не понимаю. Если по длине,…   7.10.2008 3:23
Lapp   В ассемблере есть функция length(s)?...в мои позн…   7.10.2008 3:29
мисс_граффити   Ввод строк сделал? Проблемы только с определением …   7.10.2008 18:37
Rocket   Ввод строк сделал? Проблемы только с определением…   7.10.2008 21:09
мисс_граффити   Ну например... .model small .stack 512 .data buf1 …   8.10.2008 0:26
Rocket   Ну например... всё отлично, большое спасибо) вот т…   9.10.2008 3:38
мисс_граффити   У меня работает все. Да ты по сути ничего в этой с…   9.10.2008 3:54
Rocket   У меня работает все. Да ты по сути ничего в этой …   10.10.2008 3:21
volvo   Rocket, Чем компилируешь, если не секрет? Приведе…   10.10.2008 3:43
Rocket   Rocket, Чем компилируешь, если не секрет? Привед…   11.10.2008 1:31
volvo   А может, ты его просто не видишь? :wink: Alt+F5 н…   11.10.2008 1:51
Rocket   А может, ты его просто не видишь? :wink: Alt+F5 …   11.10.2008 2:01
Rocket   Всё-таки как организовать вывод сообщеия о том нас…   13.11.2008 5:20
volvo   Ну, и кто тебе сказал, что lea dx, X преобразует т…   13.11.2008 6:18
Rocket   А если у нас не 10 символом максимальный размер, а…   28.11.2008 2:31
volvo   Значит, придется написать процедуру вывода десятич…   28.11.2008 3:12
Rocket   Значит, придется написать процедуру вывода десятич…   28.11.2008 4:02
volvo   Комментарии добавлены в предыдущее сообщение...   28.11.2008 5:10
Rocket   Комментарии добавлены в предыдущее сообщение... …   5.12.2008 3:25
volvo   Вот тебе программа, которая это делает... В виде п…   7.12.2008 16:24
Rocket   Вот тебе программа, которая это делает... У меня …   9.12.2008 4:36
volvo   1) Использование "offset". Я так полага…   9.12.2008 5:08
Rocket   Всё стало на свои места! Спасибо:) Так, вот ещ…   10.12.2008 4:24
volvo   1) процедура show_ax для чего предназначена? мы в…   10.12.2008 4:46
Rocket   Да, скорее всего надо в процедуре получать через …   10.12.2008 16:42
volvo   А я переделал вот так: findSStr proc ; Ищем первы…   10.12.2008 17:09
Rocket   Вот последняя вариация программы: data segment en…   11.12.2008 3:20
volvo   Нет... Проблема не тут. Замени вот эти 2 строки: …   11.12.2008 3:56
Rocket   Нет... Проблема не тут. Замени вот эти 2 строки: …   11.12.2008 4:42
volvo   Ты просто забыл кое что (например, очистить AX пер…   11.12.2008 5:39
Rocket   Ты просто забыл кое что (например, очистить AX пер…   12.12.2008 2:40


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

 





- Текстовая версия 29.04.2024 18:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name