IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> помогите, почему выдаёт ошибку деление на ноль?
сообщение
Сообщение #1


Гость






uses crt;
var i,k:word;
BEGIN
clrscr;

asm
mov cx, i { ; это будет i}
mov si, k {; это будет k}
mov bx, 11 {; число для вычисления модуля}

@l0:
cmp cx, 199 {; если i больше или равно 199 выходим из цикла}
jge @ext1

mov ax, si
shr ax, 1 {; деление k на 2}
add ax, cx {; добавляем i}
xor dx, dx {; очищаем dx для деления}
div bx {; делим на 11}

cmp dx, 5{ ; сравниваем остаток}
jnz @label2{ ; если не равен 5 - то на label2}

sub cx, si{ ; иначе i = i - k}
jmp @l0 ; {в начало цикла}

@label2:
mov ax, si {; подготавливаем деление}
xor dx, dx
mul ax {; умножаем на себя (k*k)}
mov dx, cx
shr dx, 1 {; делим i на 2 }
add ax, dx {; добавляем к резульату k*k}
mov si, ax {; заносим результат в k }
jmp @l0 {; в начало цикла}

@ext1:
{... ; обработка результата}
end;
writeln('REZULTAT-ASSAMBLER');
writeln('k=',k,' i=',i);
readkey;
end.



сам цикл таков
i:=57; k:=19;
while i<199 do
if ((i + k div 2) mod 11) = 5 then i:=i-k else k:=k*k+(i div 2)


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


В ассемблерном примере деление на ноль у тебя возникает, из-за того, что переменным i и k ты не задал начальных значений.
Более того в том примере, где ты показал как должно быть, цикл получается бесконечный. Ибо после нескольких проходов по телу цикла значения i и k становятся 57 и 17493 и более не меняются. Переменная i не меняется совсем!


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(hiv @ 18.01.2007 14:37) *

В ассемблерном примере деление на ноль у тебя возникает, из-за того, что переменным i и k ты не задал начальных значений.
Более того в том примере, где ты показал как должно быть, цикл получается бесконечный. Ибо после нескольких проходов по телу цикла значения i и k становятся 57 и 17493 и более не меняются. Переменная i не меняется совсем!



А ты не можешь подсказать где именно ошибка???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(forum4uxa @ 18.01.2007 20:10) *

А ты не можешь подсказать где именно ошибка???

Здрасьте, я ваша тетя! В самом начале программы (перед директивой ASM) ставишь i:=57; k:=19;
А по поводу зацикливания - сам разбирайся, у нас телепатов нету. Ты же привел код, а для решения какой задачи не сказал. Вот и ищи теперь сам.

Сообщение отредактировано: hiv -


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(hiv @ 19.01.2007 10:10) *

Здрасьте, я ваша тетя! В самом начале программы (перед директивой ASM) ставишь i:=57; k:=19;
А по поводу зацикливания - сам разбирайся, у нас телепатов нету. Ты же привел код, а для решения какой задачи не сказал. Вот и ищи теперь сам.

а всё же... почему возникает ошибка: ДЕЛЕНИЕ НА НОЛЬ , ведь значения указываем, все регистры чего нить содержат, что за дела-то?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


После того ка я поставил "i:=57; k:=19;" в начале код зацыклился так же как и паскалевский. Значит задание выполнено верно. smile.gif
Если все же есть сомнения, то можно просто откомпилировать паскалевский вариант и выдернуть из дизасма то, что получится. Тогда будет точно 1 в 1.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(Malice @ 19.01.2007 11:48) *

После того ка я поставил "i:=57; k:=19;" в начале код зацыклился так же как и паскалевский. Значит задание выполнено верно. smile.gif
Если все же есть сомнения, то можно просто откомпилировать паскалевский вариант и выдернуть из дизасма то, что получится. Тогда будет точно 1 в 1.

а можешь акценировать внимание на "дизасм" , а то я уже и незнаю, что и делать...Если не трудно можешь объяснить, а то уже начинает поднаедать сидеть 3 сутки над этой задачкой, заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(forum4uxa @ 20.01.2007 20:46) *

а можешь акценировать внимание на "дизасм" , а то я уже и незнаю, что и делать...

Вот здесь посмоти, я ответил уже:
как это будет выглядеть в Паскале?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Код
cmp dx, 5{; сравниваем остаток}
        jnz @label2{; если не равен 5 - то на label2}

jnz - переход если результат не ноль
мне кажется здесь нужно использовать JNE
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Asm @ 20.01.2007 23:17) *

jnz - переход если результат не ноль
мне кажется здесь нужно использовать JNE

Одно и тоже, суть - проверка флага ZF.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


и всё таки получилось у кого???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Ты узнал у препода на счет данного тебе цыкла ? Он виснет. Его менять нельзя. На асме делается тоже самое. В чем проблема ? Что должно получится ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(Malice @ 23.01.2007 15:49) *

Ты узнал у препода на счет данного тебе цыкла ? Он виснет. Его менять нельзя. На асме делается тоже самое. В чем проблема ? Что должно получится ?

препод сказал что всё нормально, поломай типа головку.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






hiv,а есть вероятность что при заданных значениях i и k он когда нибудь расциклится????
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(Asm @ 24.01.2007 0:57) *

hiv,а есть вероятность что при заданных значениях i и k он когда нибудь расциклится????

даже при четырехбайтовом целом k - вероятность 0%


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Asm @ 24.01.2007 0:57) *

hiv,а есть вероятность что при заданных значениях i и k он когда нибудь расциклится????

как это будет выглядеть в Паскале?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(Malice @ 24.01.2007 9:35) *

Друг, а ты её запускал? работала?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(forum4uxa @ 24.01.2007 11:18) *

Друг, а ты её запускал? работала?

Конечно. Да. С i=19, k=57.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 26
Пол: Мужской
Реальное имя: Alexey

Репутация: -  0  +


Цитата(Malice @ 24.01.2007 11:36) *

Конечно. Да. С i=19, k=57.

а у меня почему то всё равно деление на ноль, покажи пожалуйста свой текст программы
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Вот оба варианта, оба у меня работают одинаково.


Сообщение отредактировано: Malice -


Прикрепленные файлы
Прикрепленный файл  pas_asm.ZIP ( 534 байт ) Кол-во скачиваний: 118
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 30.10.2020 8:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name