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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 16:58   #1
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
По умолчанию Цикл for

Здравствуйте!
У меня такой вопрос. Мне нужно реализовать цикл for вида for(i=-a;i<=b;i++), где в цикле выполняются некоторые вычисления. Тело цикла уже есть и работает почти правильно.
Если бы цикл начинался с 1, то тут мне ясно, как это делать. Но как быть, если цикл начинается не с единицы, да еще с отрицательного числа? Будьте добры, подскажите, как можно реализовать цикл тогда? Ибо мои поиски ничего не дали.
Спасибо!

Последний раз редактировалось kogtishka; 07.03.2013 в 17:02.
kogtishka вне форума
Старый 07.03.2013, 17:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как быть, если цикл начинается не с единицы
А что за проблема начать его с единицы?
А почему он начинается с произвольного числа?
Программу явно не ты писал?
I'm learning to live...
Stilet вне форума
Старый 07.03.2013, 17:58   #3
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
По умолчанию

Проблема в том, что так звучит задание. Я б не стал заморачиваться, если бы не нужно было выполнять определенное условие.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Программу явно не ты писал?
Не понял, в каком смысле??
kogtishka вне форума
Старый 07.03.2013, 18:47   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

В смысле: если бы ты знал, как начать цикл с 1, то наверняка знал бы, как начать его с любого другого числа, т.к. единица в этом отношении от других чисел ничем не отличается.
s-andriano вне форума
Старый 07.03.2013, 19:57   #5
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
По умолчанию

Программу я писал сам, и смешно полагать, что ее делал не я, если я не знаю, как правильно реализовать цикл, при учете того, что там ни одного цикла, кроме того, что нужен мне здесь. Поскольку, по-видимому, это оказалось слишком сложно - просто натолкнуть меня на мысль, и я так и не дождусь ответа в виду подозрений в моей некомпетентности в ассемблере, я попробовал реализовать цикл следующим образом:
Код:
        mov x,0 ;устанавливаем сумму нулевой
	mov ax,a
	add ax,b
	add ax,1
	mov cx,ax
	call S ;здесь выполняются вычисления
	push ax
for:	add ax,x
	loop for
	pop ax
	call outres ;вывод результата
Но как цикл это не работает, и выводится только результат непосредственно вычисления. В чем тут прикол?

P.S. Свои подозрения оставьте себе, они мне без надобности
kogtishka вне форума
Старый 07.03.2013, 20:06   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

push/pop вокруг for убрать. (результат работы цикла затирается pop)

да, и это, счетчик цикла имеет смысл считать так

Код:
MOV cx, [b]
SUB cx, [a]
ADD cx, 1
да, и если не хочется читать подозрения о личной проф-пригодности, формулируйте вопрос корректно и приводите код сразу. вопрос шаровой, и при его прочтении у меня зародились некоторые подозрения, как и у других участников. после увиденного кода сомнения в том, что это ваш код отпали.

Последний раз редактировалось f.hump; 07.03.2013 в 21:35.
f.hump вне форума
Старый 08.03.2013, 00:04   #7
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
По умолчанию

Поправил. Теперь вообще какой-то неадекват выводится. Какое-то число, которое и близко рядом с правильным не стояло О_о Интересно, не может ли быть проблема в выводе?
Вывод я делаю так:
Код:
outres	proc
    	cmp di,1
    	jnz @di
    	push ax
    	mov al,'-'
    	int 29h
    	pop ax
@di:	xor cx,cx		
    	mov bx,10		;основание сс
L2: 	xor dx,dx
    	div bx			;число делится на основание, в остатке
				;последняя цифра
    	push dx			;сохраняется в стэк
    	inc cx
    	test ax,ax		;то же самое с частным
    	jnz L2			
    	mov ah,02h		;вывод
L3: 	pop dx			;извлекается цифра
    	add dl,'0'		;переводится в символ
    	int 21h			;и выводится
    	loop L3			;повторяется для всех цифр
    	ret
outres	endp
Может, ошибка закралась где-то тут?

Последний раз редактировалось kogtishka; 08.03.2013 в 14:38.
kogtishka вне форума
Старый 08.03.2013, 00:43   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

что делает S?
f.hump вне форума
Старый 08.03.2013, 06:46   #9
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

kogtishka, сами, говорите, код писали? А на cyberforum.ru Вы случайно не были женского полу с ником maymay? Я там этой/этому маймаю помогал немного, и в Вашем коде, приведённом здесь, мои исправления с точностью до имён меток. Вот кусочек:
Цитата:
Сообщение от kogtishka Посмотреть сообщение
Код:
        cmp di,1
    	jnz @di
    	push ax
    	mov al,'-'
    	int 29h
    	pop ax
@di:	xor cx,cx
Хотя бывают, конечно, совпадения.
А, забыл совсем. С 8-м марта, на всякий случай.

Последний раз редактировалось vadimych; 08.03.2013 в 06:55.
vadimych вне форума
Старый 08.03.2013, 12:40   #10
kogtishka
 
Регистрация: 21.02.2012
Сообщений: 8
По умолчанию

vadimych, обрадую Вас - на cyberforum я был, и этот кусок кода взят оттуда в поисках адекватного вывода, потому что я не столь крут в ассемблере, чтобы суметь это сделать самому. Это же не Ваша интеллектуальная собственность, я надеюсь? Не моя беда, что у девушки та же проблема была. Я только порадовался, редко можно найти точное совпадение того, что ищешь. А свои подозрения в купе с поздравлениями оставьте себе Тут у всех вообще хобби меня подозревать

f.hump, S выполняет вычисления. Они работают правильно, так что я не стал их тут приводить.
kogtishka вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл for lawliet93 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 17.08.2012 21:41
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34