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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 16:15   #1
suicide
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию Инкремент константы в цикле, FASM

Доброго времени суток, требуется изменять увеличивать значение константы в цикле, код вида
Код:
N = 1
cycl:
...
N = N+2
...
loop cycl
При каждом проходе даёт значение N, равное 3. Делается всё через константу, т.к. в цикле используется циклический сдвиг rcr, операндом которого, насколько я понимаю, может выступать только число или константа, поэтому единственное, что пришло в голову это использовать rcr reg,N. Буду благодарен за другое решение проблемы сдвига в цикле на изменяющееся значение.
suicide вне форума Ответить с цитированием
Старый 19.12.2009, 17:17   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Что-то я не понял, что нужно, но можно и rcr reg,CL.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 19.12.2009, 18:14   #3
suicide
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию

Это, конечно, хорошо, но cx при этом является счётчиком цикла, пришлось переопределять содержимое cx, но всё равно спасибо, т.к. работает, про rcr reg,cl просмотрел и всё же непонятно, почему константа не переопределяется.
suicide вне форума Ответить с цитированием
Старый 19.12.2009, 19:00   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

А вам ничего не кажется странным в этой фразе ?
Цитата:
константа не переопределяется.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 19.12.2009, 19:16   #5
suicide
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение
А вам ничего не кажется странным в этой фразе ?
Честно говоря нет, так как переопределние константы операция легальная, в плюсах const++ чем не переопределение константы? Мне кажется странным, что константа каждый раз переопределяется исходя из значения, указанного вне цикла, а не на основе значения полученного в предыдущем проходе цикла.
suicide вне форума Ответить с цитированием
Старый 19.12.2009, 19:33   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
const++ чем не переопределение константы?
тем что это инкримент переменой.

Код:
const int cons = 10;
cons++;
Такое не пройдет.

Кстати а как вы на асме константу определили ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 19.12.2009 в 19:37.
Goodwin98 вне форума Ответить с цитированием
Старый 19.12.2009, 20:12   #7
suicide
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию

Так, как написано:
Код:
N = 1
Это не псевдокод. FASM поддерживает такой синтаксис, это раз, и два - FASM поддерживает переопределение, поэтому в конце цикла N будет равно 3. man
suicide вне форума Ответить с цитированием
Старый 19.12.2009, 20:28   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Вам знакомо действие дерективы #define в плюсах ? В данном случае происходит тоже самое. Для нее не выделяется память и ее переопределение возможно только во время компиляции, а не во время выполнения. Поэтому она и не может увеличиваться в цикле.

Если вы дизассемблируете ваш код, то увидите, что N превратилось просто в число 1 или 3.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 19.12.2009 в 20:44.
Goodwin98 вне форума Ответить с цитированием
Старый 19.12.2009, 21:18   #9
suicide
Новичок
Джуниор
 
Регистрация: 19.12.2009
Сообщений: 5
По умолчанию

Это я собственно и увидел, и этим и был вызван вопрос, спасибо за разъяснения. Тему можно закрывать, в принципе. Через cl делать можно, но не очень удобно, Goodwin98, ещё раз спасибо за помощь.
suicide вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использовать оператор цикла, сдвиги и инкремент Еля Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 16.11.2009 15:04
Инкремент и декремент в циклах Nvidia Общие вопросы C/C++ 8 17.10.2009 11:54
Инкремент и дикремент Golovastik Общие вопросы C/C++ 3 16.07.2009 13:39
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33