Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2008, 22:03   #1
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
Вопрос Проверить, является ли заданная строка симметричной. - Ассемблер

Мне надо задачку решить на ассемблере,чтобы экзамен сдать,а я с ассемблером плохо дружу.
Вот условие:Проверить, является ли заданная строка симметричной.
Мне пытались решить,но до конца не получилось.Там что то с выводом не получается.Вот что имеется

Код:
.model small
.stack 100h
.data
Stroka DB 'kabak' ;Это слово мне по душе 
Str_Len DB $-Stroka ;Длина строки
text1 db "ne polindrom$"
text2 db "palindrom$"
.code
org 100h
start:
lea si,stroka ;Смещение первого символа
lea di,str_len-1 ;Смещение последнего
mov cl,str_len-stroka;Длина строки и цикл, для скорости можно добавить shr cl,1
go: ;но проиграем в размере
cmpsb ;Сравниваем 1 и 5(в нашем случае) потом 2-4,3-3,4-2,5-1.....при добавлении строки shr cl,1
;сравниваем 1-5,2-4
jne $+7 ;На выход, если не равны
dec di ;Настройка индексов
dec di
loop go
dec ax ;Если Stroka палиндром, то AX=0FFFFh, иначе 0
exit:
cmp ax,0FFFFh
je ppp
    mov ah,9h
 mov dx, offset text1
 int 21h
 
 jmp VIHOD
ppp:
 mov ah,9h
 mov dx, offset text2
 int 21h
;ret ;Game Over
VIHOD:
mov ah,4ch
 int 21h
end start
Если кто то сможет понять что тут))),то подскажите что надо доделать или изменить и как, чтобы всё работало!Заранее СПАСИБО!!!
VHomer вне форума Ответить с цитированием
Старый 23.12.2008, 00:15   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Перед вызовом DOS-прерываний (некоторых), необходимо настроить сегментный регистр данных ds на сегмент памяти, содержащий ваши данные. Так как вы использовали директивы упрощённой сегментации .data, .code, то сделать это можно так:

Код:
.code
org 100h
start:
mov	ax, @data
mov	ds, ax

lea si,stroka ;Смещение первого символа
;ну и т.д.
Хотя программа всё равно неправильно работает, слово "kabak" ведь симметричное, а она пишет ne polindrom. А вообще принципиально применение цепочечных инструкций cmpsb в вашей программе ??
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 23.12.2008 в 00:31. Причина: грамматика
Ulex вне форума Ответить с цитированием
Старый 24.12.2008, 14:37   #3
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Не обязательно!
Мне вообще кажется,что можно намного проще всё это сделать!Но как, не знаю(((
VHomer вне форума Ответить с цитированием
Старый 27.12.2008, 19:37   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Если ещё актуально, то вот вариант без cmpsb:
Вложения
Тип файла: rar proga11.rar (810 байт, 45 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с симметричной матрицой AlexLAN Паскаль, Turbo Pascal, PascalABC.NET 8 12.04.2011 22:03
Является ли заданная строка правильной записью вещественного числа с возможным знаком и десятичной точкой Banny Паскаль, Turbo Pascal, PascalABC.NET 7 18.12.2008 22:28
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32
Определить, является ли заданная строка правильной записью вещественного числа Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2007 16:53
Проверить пуста ли строка? Slim Microsoft Office Excel 2 09.04.2007 15:55