![]() |
|
|
![]()
|
|
| Hidalgo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.12.2010 Репутация: нет Всего: нет |
Вот такой маленький вопрос хотел бы уточнить:
"Надо переписать цикл я языка паскаль, на язык Ассемблер" - посмотрите правильно ли будет, и не будет ли зацикливания? for v1 := v2 downto v3 do v4 := v4 + 10
|
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Идейно верно, но не ловится ситуация, когда v2 < v3, плюс не учтено изменение значения v1.
-------------------- Что непонятно - спрашиваем |
|||
|
||||
| Hidalgo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.12.2010 Репутация: нет Всего: нет |
а как это предусмотреть? |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Точно не уверен, но вроде бы:
- если v2 < v3, то цикл не выполняется, v1 не изменяется; - иначе v1 после цикла оказывается равной v3. В зависимости от типа переменных надо использовать знаковое или беззнаковое сравнение для выяснения, нужно ли выполнять цикл. -------------------- Что непонятно - спрашиваем |
|||
|
||||
| Hidalgo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 12.12.2010 Репутация: нет Всего: нет |
а не количество шагов цикла: cx = v2-v3+1 |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 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, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
iff, inc cx там стоит - все нормально. cx = v3 - v2 + 1 = 1 при v2 = v3.
выводит 5. cx-то пусть себе будет количеством шагов цикла, а вот [v1] := [v2] в случае v2 <= v3. -------------------- Что непонятно - спрашиваем |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |