Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
1

Деление даёт неверный ответ, в чем ошибка?

27.01.2016, 19:03. Показов 2942. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
mov eax,-50
imul eax,[ss:bp+38]
mov ebx, 180
imul eax,[ss:bp+32]
idiv ebx
умножение нормальное(в смысле результат верный), а деление даёт неверный ответ в чем ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2016, 19:03
Ответы с готовыми решениями:

Деление даёт неверный ответ
mov eax,11016 mov ebx,16384 xor edx, edx cdq idiv ebx после этого всего в edx просто...

Чем занят порт 80, netstat -ano дает непонятный ответ
Добрый день! Локальный сервер ( openserver ) не запускается, в логе известная ошибка: Начало...

Где ошибка в программе? Исправьте, пожалуйста! Программа выдает неверный ответ!
Составьте программу, определяющую чаще всего встречающуюся компоненту файла f. var f: file...

Неверный размер массива. в чем ошибка?
int le( int array) { int i=0; while(array); return (i-1); } int main() {

12
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
27.01.2016, 19:47 2
В Вашем случае в строке 5 производится попытка деления edx:eax на ebx. Что при этом находится в edx? Если хотите делить только eax, то напишите перед idiv вот это:
Assembler
1
mov edx,0
0
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
27.01.2016, 20:11  [ТС] 3
В edx - 0, но даже с этой строкой тоже ответ неверный(такой же), после idiv обновляются регистры eax и edx, насколько я понимаю это число и остаток, но они неверные
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
27.01.2016, 21:11 4
Лучший ответ Сообщение было отмечено AnySk как решение

Решение

Дык, перед idiv команду cdq поставить не пробовали?
1
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
27.01.2016, 22:07 5
Цитата Сообщение от AnySk Посмотреть сообщение
после idiv обновляются регистры eax и edx, насколько я понимаю это число и остаток, но они неверные
Что в eax и edx и ebx перед idiv, и что в них после idiv?
0
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
27.01.2016, 22:32  [ТС] 6
Дык, перед idiv команду cdq поставить не пробовали?
я тут почитал "cdq Назначение: расширение двойного слова со знаком до размера учетверенного слова (64 бита) со знаком." кажется мне это не подходит
Что в eax и edx и ebx перед idiv, и что в них после idiv?
к сожалению у меня turbo debugger регистры слова только показывают и поэтому о правильности судить могу по окончанию:
собственно после перемножения в eax "FFDA 8000", а в ebx "B4", если первое на второе делить,
то на калькуляторе получается '-13,653" или "FFFF CAAB(но в этом я не уверен, просто не знаю можно ли дробное в шестнадцатиричке так написать)"
, а на второй картинке видно, что ничего похожего
Миниатюры
Деление даёт неверный ответ, в чем ошибка?   Деление даёт неверный ответ, в чем ошибка?  
0
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
28.01.2016, 01:33 7
Перед делением в eax 248000h судя по результатам. Можно скачать FASM, он бесплатный, и видно полностью 32 разряда в регистрах.
cdq Вам подходит, он делает то же самое что mov edx,0.
1
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
28.01.2016, 09:48  [ТС] 8
я тут нашел более новую версию debugger с 32 регистрами и оказалось, что
при переносе из стека в dword в старшие разряды вместе с числом переносились какие-то символы решил проблему так
Assembler
1
2
mov bx, [ss:bp+32]
imul eax, ebx
только не понял, что за символы
0
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
28.01.2016, 09:55  [ТС] 9
но проблема с делением так и осталась
Миниатюры
Деление даёт неверный ответ, в чем ошибка?  
0
Terminator of naked apes
832 / 139 / 34
Регистрация: 13.02.2015
Сообщений: 328
28.01.2016, 10:37 10
Цитата Сообщение от skaa Посмотреть сообщение
cdq Вам подходит, он делает то же самое что mov edx,0.
Не слишком ли категоричное утверждение (а если EAX < 0, например ;о)?

Добавлено через 8 минут
Цитата Сообщение от AnySk Посмотреть сообщение
только не понял, что за символы
Скорее всего, что в параметре, описанном как двойное слово (4 байта), ты передаёшь слово (2 байта). Копни вызывающий код, например ;о)
1
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
28.01.2016, 17:53 11
Цитата Сообщение от AnySk Посмотреть сообщение
но проблема с делением так и осталась
Прикрепите картинку до и после idiv. KyberMax прав, перед idiv надо cdq ставить, у Вас ведь теоретически и отрицательное число может находиться в eax.
1
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
28.01.2016, 18:15  [ТС] 12
я не уверен, может это связанно с различными методами деления слова на байт, слова на слово и т. д. , но я так и не разобрался так это или нет
Миниатюры
Деление даёт неверный ответ, в чем ошибка?   Деление даёт неверный ответ, в чем ошибка?  
0
1 / 1 / 1
Регистрация: 10.01.2016
Сообщений: 58
28.01.2016, 18:26  [ТС] 13
KyberMax прав, перед idiv надо cdq ставить, у Вас ведь теоретически и отрицательное число может находиться в eax.
ДА ДА ДА Решено! все заработало , спасибо!
0
28.01.2016, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2016, 18:26
Помогаю со студенческими работами здесь

Умножение и деление(В чем ошибка)
Делаем лаб. раб. на Си с вставка Assembler. Выдает ошибку&quot; Необработанное исключение по адресу...

В чем может быть ошибка. Неверный синтаксис команды, ассемблер
.model tiny .code org 100h start: ;--------------------- Вывод строки сообщения Введите...

Скажыте в чём проблема??Ошибка деление на 0
program prikldan_repeatL; Var a,b,x,y: real; i:integer; begin a:=3.1; b:=1.5;...

В чем ошибка, не считает...ответ выдает по нулям((((
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; char buf ; char*RUS(const...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru