Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл 
:(
    Опции темы
Hidalgo
Дата 29.12.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такой маленький вопрос хотел бы уточнить:
"Надо переписать цикл я языка паскаль, на язык Ассемблер"  - посмотрите правильно ли будет, и не будет ли зацикливания?

for  v1 := v2 downto v3 do
    v4 := v4 + 10

Код

   mov cx, [v2]
   sub  cx, [v3]
   inc   cx
@cycle:
   add [v4], 10
   loop @cycle



PM MAIL   Вверх
JAPH
Дата 30.12.2010, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Идейно верно, но не ловится ситуация, когда v2 < v3, плюс не учтено изменение значения v1.



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Hidalgo
Дата 30.12.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Идейно верно, но не ловится ситуация, когда v2 < v3, плюс не учтено изменение значения v1.


а как это предусмотреть?

PM MAIL   Вверх
JAPH
Дата 30.12.2010, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Точно не уверен, но вроде бы:
- если v2 < v3, то цикл не выполняется, v1 не изменяется;
- иначе v1 после цикла оказывается равной v3.

В зависимости от типа переменных надо использовать знаковое или беззнаковое сравнение для выяснения, нужно ли выполнять цикл.


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
Hidalgo
Дата 30.12.2010, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Точно не уверен...
 

а не количество шагов цикла: cx = v2-v3+1 
PM MAIL   Вверх
iff
Дата 30.12.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


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

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



И ещё, если CX будет равен 0 (т.е. v2 = v3), то козалось бы цикл должен выполняться 0 раз, иначе говоря не выполняться, но команда loop при нулевом значении CX всеравно БУДЕТ выполняться. А всё почему - потому что loop работает так: уменьшает CX на 1, а затем сравнивает CX с нулём, и если CX=0, то выполнение цикла прекращается. Когда же CX=0, то  всё происходит так: инструкция loop уменьшает его на 1, т.е. CX становится равным 0FFFFH, затем сравнивает CX (в данном случае 0FFFFH) с нулём, и т.к. 0FFFFH не равен 0, то выполнение цикла продолжается ещё 65535 раз.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
JAPH
Дата 30.12.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



iff, inc cx там стоит - все нормально. cx = v3 - v2 + 1 = 1 при v2 = v3.


Код

v2 := 5;
v3 := 6;
for v1 := v3 downto v2 do v4 := v4 + 10;
writeln(v1);

выводит 5.

cx-то пусть себе будет количеством шагов цикла, а вот [v1] := [v2] в случае v2 <= v3.


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

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

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


 




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


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

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