Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лаба по строкам, может кто поможет? 
:(
    Опции темы
Artiom
Дата 16.5.2004, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: нет
Всего: 17



Делаю лабу по ASM, пока настолько безграмотен, что всё идет с трудом.
Задача такая: Определить количество слов в строке, у которых совпадают первый и последний символы
Может быть кто набросает немного кода?
Честное слово это не от лени, просто вправду совсем нет времени - уже сдаю сессию.



--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Chingachguk
Дата 16.5.2004, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

const
  StrWithWords: string = 'First Second Third Lake Foot Sand Tread Fake Dust Solid';
  NumWords: word = 0;
begin
  asm
  mov  si,offset StrWithWords
  { bx = string len }
  mov  dl,[si]
  mov  dh,0
  { dx = point to last symbol }
  add  dx,si
  { si = point to first symbol }
  inc  si
  { cx = number of founded words }
  xor  cx,cx
  { bx = point to founded first and last symbols }
  mov  bx,si
  { Store bx }
  push bx
@@FindWords:
  cmp  si,dx
  jae  @@SearchDone
  { Get first symbol of current word in al }
  mov  al,[si]
  { Find last symbol in word }
  mov  di,si
@@ScanForFiller:
  inc  di
  cmp  di,dx
  ja  @@ScanForFillerDone
  cmp  byte ptr [di],' '
  jnz  @@ScanForFiller
@@ScanForFillerDone:
  { Get last symbol in ah }
  mov  ah,[di-1]
  { Store first and last symbol in string }
  mov  word ptr [bx],ax
  { bx point to next pair }
  add  bx,2
  { si = point to next word }
  lea  si,[di+1]
  { Increment number of words }
  inc  cx
  jmp  @@FindWords
@@SearchDone:
  { bx = point to begin of pairs }
  pop  bx
  cmp  cx,1
  jbe  @@NoMoreWords
  dec  cx
@@ComapreWords:
  { Get first and last symbols in ax }
  mov  ax,[bx]
  add  bx,2
  mov  si,bx
  push cx
@@ScanForCurrentPair:
  cmp  word ptr [si],ax
  jnz  @@NoEqualPair
  inc  word ptr NumWords
@@NoEqualPair:
  { si = point to next pair }
  add  si,2
  loop @@ScanForCurrentPair
  pop  cx
  loop @@ComapreWords
@@NoMoreWords:
  end;
  writeln('Number words = ',NumWords);
end.

Добавлено @ 18:18
Да, и уточни - что делать, если в строке есть три слова типа Ted Tod Tread.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Artiom
Дата 16.5.2004, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1031
Регистрация: 11.3.2003
Где: Минск\Баку

Репутация: нет
Всего: 17



Спасибо. буду разбираться.
Цитата
Да, и уточни - что делать, если в строке есть три слова типа Ted Tod Tread.

Честно говоря не понял. мне подходят слова типа Tot, dfffsd, anna и т.д.
А что такое @@? Я так понял что это переход на соответствующую метку, но в моих методичках такого нет. И в ближнем учебнике тоже.


--------------------
Если тебя жизнь трахает, значит, ты ещё живой
PM MAIL ICQ   Вверх
Serzh
Дата 17.5.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



Цитата(Artiom @ 16.5.2004, 18:47)
А что такое @@? Я так понял что это переход на соответствующую метку, но в моих методичках такого нет. И в ближнем учебнике тоже.

это просто название метки...
можешь их убрать, если они тебе так не нравяться... smile.gif
PM MAIL WWW ICQ   Вверх
Guest
Дата 17.5.2004, 08:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
это просто название метки...
можешь их убрать, если они тебе так не нравяться... 


Это не совсем так... Изначально символ "@" означал именно "адрес, адресный операнд". Если кто заметил, то я написал этот код не на чистом ассемблере, но на ассемблерных вставках в языке tp7. А если кто писал на паскале (или делфи), тот знает, что такое:

Цитата

var
MyIntVariable: integer;
MyPointToVar: pointer;
begin
MyPointToVar:=@MyIntVariable; { Адрес переменной MyIntVariable}


В ассемблерных вставках в этом языке соответственно нельзя называть метки иначе как с "@".

  Вверх
p0s0l
Дата 17.5.2004, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
В ассемблерных вставках в этом языке соответственно нельзя называть метки иначе как с "@".

Вернее можно, но дополнительно надо их объявлять в Label, поэтому так почти не делают - лишний геморрой:
Код
label l1;
begin
 asm
   jmp l1
   l1:
   ret
 end;
end;




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.