Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
31 / 21 / 10
Регистрация: 08.10.2017
Сообщений: 181
1

Ошибка при выполнении целочисленных арифметических операций

17.12.2017, 11:22. Показов 1278. Ответов 4

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, с прогой. Пишу простейшую штуку на масме, вот код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
include\masm32\include\masm32rt.inc
 
.data
x1 dd 13
x2 dd 5
x3 dd 1
 
.code
start:
 
main proc
mov eax,x1
mov ebx,x2
add eax,ebx
mov edx,x3
add edx,ebx
div edx
fn MessageBox,0,str$(eax),"Решение уравнения y=(a+b)/(b+c) при a=13, b=5, c=1",MB_OK
invoke ExitProcess,0
 
main endp
end start
Прога компилится, то есть ошибок в синтаксисе нет. Но при запуске вылетает с сообщением об ошибке. Юзал ollydbg, при пошаговом выполнении дальше деления дело не заходит (видимо, делимое берется не оттуда). Подскажите, в чём ошибка?

Добавлено через 3 минуты
Да, забыл сказать, что тот же ollydbg показал корректное заполнение регистров (в них висят нужные мне числа), то есть 100% ошибка в делении.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2017, 11:22
Ответы с готовыми решениями:

Какие флаги во флаговом регистре изменились при выполнении арифметических операций и почему?
Ребят помогите пожалуйста. Задание. Часть 1. Даны числа а=FEDCh и b=ABCDh (числа в 16-ричном...

Целочисленных арифметических действий
Дано трехзначное натуральное число А. Получить новое натуральное число В, который являлся бы...

Вычисление целочисленных арифметических выражений
Ребята, помогите пожалуйста. бьюсь уже над задачей пару дней...ничего не выходит...даже не...

Вычисление целочисленных арифметических выражений
Составить блок схему алгоритма и программу на языке ассемблер. y=(-2c-d/4)/(b-a/4) ; a, b, c, d...

4
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.12.2017, 21:58 2
По моему, на edx делить нельзя - особенность вычислений.
Цитата Сообщение от Mikl___ Посмотреть сообщение
Хотя об этом явно не предупреждают и существуют кодировки div/idiv edx/dx/ah — выполнение таких операций при любом содержимом регистра edx/dx/ah будет приводить к ошибке, аналогичной делению на 0.
0
31 / 21 / 10
Регистрация: 08.10.2017
Сообщений: 181
17.12.2017, 22:07  [ТС] 3
По моему, на edx делить нельзя - особенность вычислений.
Спасибо, деление работает после простой перемены местами регистров ebx и edx. Осталось только понять, что он теперь на содержимое регистра ebx делит...
Миниатюры
Ошибка при выполнении целочисленных арифметических операций  
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.12.2017, 22:16 4
Лучший ответ Сообщение было отмечено Slepoyi как решение

Решение

Если почитать статью о делении по ссылке, становится понятным, что div ebx выполняет деление 64-разрядного числа в регистровой паре edx:eax на ebx
Поэтому, если нужно разделить неотрицательное 32-разрядное число в eax то обнуляют edx.

Если делят знаковое число в eax, то "расширяют" eax до 64 разрядов при помощи команды cdq, а деление выполняют командой idiv
1
31 / 21 / 10
Регистрация: 08.10.2017
Сообщений: 181
17.12.2017, 22:38  [ТС] 5
Спасибо огромное, можно закрывать
0
17.12.2017, 22:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2017, 22:38
Помогаю со студенческими работами здесь

Исследование арифметических операций
Уважаемые программисты, помогите с кодом,и если можно с объяснением. Используя в качестве...

Использование арифметических операций
Разработать программу вычисления значения по формуле. Программа должна обеспечивать анализ...

Выполнение арифметических и логических операций
В каждом из заданий переменные a, b, c, d определяются в сегменте данных и имеют размерность...

Реализация простейших арифметических операций
я в Assembler практически не разбираюсь! Задание: y=x*5-x:2 Должно выполнять следующие функции:...


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

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