Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
swillrocker
319 / 109 / 113
Регистрация: 09.04.2011
Сообщений: 236
1

При вычислении выражения ошибка на строке "IDIV DX"

13.11.2012, 20:09. Просмотров 536. Ответов 3
Метки нет (Все метки)

Выражение: (c-d/2+23)/(2a^2-1);

c=19 d=36 a=51

Assembler
1
2
3
4
5
6
7
8
MOV AX, 11
MOV BX, 22
MOV CX, 33
MOV DX, 2
XCHG AX, BX
IDIV DX             ; (при трассировке вылетает на этой строчке)
SUB BX, AX
....................
Добавлено через 2 часа 13 минут
Теперь проблема в последней строке.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MOV AX, 13
MOV BX, 24
MOV CX, 2
XCHG AX, BX
IDIV CX
SUB BX, AX
MOV CX, 17
ADD BX, CX
XCHG BX, CX
MOV AX, 33
MOV BX, 33
IMUL BX
MOV BX, 2
IMUL BX
DEC AX
IDIV CX ---(Деление проходит не так как надо)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 20:09
Ответы с готовыми решениями:

Рассматривая массив из 8 пятиразрядных слов, найти "исключающее или" всех 8 слов для выражения "10101"
У меня дан массив из 5 байт. Рассматривая его как массив из 8 пятиразрядных...

Ошибка при компановке программы "fatal error LNK1104"
Здравствуйте. Нужна помощь. Запускаю через qeditor, встроенный в masm32 файл...

Ошибка при линковке: "LNK1561: entry point must be defined"
.386 .model flat .code start: mov eax,2 add eax,3 end start в консоли...

Ошибка "File not found" при сохранении файла
Пишу код програмы нажимаю ctr+f9 чтобы сохранить файл и мне выдаётся ошибка...

Ошибка "Cannot generate COM file: Stack segment present" при компиляции
Ребята, не могу скомпилить программу. Выдаёт ошибку: Cannot generate COM file:...

3
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
14.11.2012, 01:46 2
Почитайте как работает IDIV! Обнулите DX перед делением, и проблем не будет.
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,539
14.11.2012, 04:02 3
skaa,
  • дело в том, что команды div edx/dx/ah и idiv edx/dx/ah всегда будут вызывать переполнение (исключение idiv edx/dx/ah где edx/dx/ah=-1) делитель должен быть всегда больше edx/dx/ah иначе результат не поместится в eax/ax/al
  • для начала нужно поместить делитель в какой-нибудь другой регистр или ячейку памяти
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
14.11.2012, 18:24 4
Согласен. Но это swillrocker уже наверное заметил (во второй части его сообщения), делит на CX.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 18:24

При запуске копии "Hello, W.."ошибка A1000
Привет всем! Чет не пойму что делаю не так! Установил МАСМ32,запустил первую...

Где хранить значения при вычислении выражения?
День добрый. Нужен совет, т.к. в ассемблере не разбираюсь. Допустим есть...

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".
Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***". Data...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru