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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2015, 21:33   #1
iluxa1810
 
Регистрация: 15.03.2015
Сообщений: 6
Печаль Ошибка: деления на 0

Дано следующее задание:


Я написал следующий код:
Код:
.model small;
.data
a db 2
b db 2
c db 2
d db 15
e db 2
f dd ?
a1 dd ?
a2 dd ?
a3 dd ?
a4 dd ?
.code
.486
mov ax,@data
mov ds,ax
mov al,a
mov ah,b
add al,ah;(a+b)=al
movsx bx,al;(a+b)
Imul al;AX -(a+b)^2
imul bx;(A+B)^3
mov bx,dx
shl ebx,16
mov bx,ax
mov eax,2
imul ebx
mov a1,edx
mov a2,eax

mov al,c
mov ah,2
imul ah;AX=2*C
mov bx,ax
mov al,d
imul al;AX=D^2
sub BX,AX;BX=(2C-D^2)
movsx AX,a;WORD a
imul BX;DX:AX 
mov bx,dx
shl ebx,16
mov bx,ax
mov edx,a1
mov eax,a2
add eax,ecx;<---
adc edx,ebx
mov a2,eax

mov al,a
;imul a; AX=A^2
;movsx bx,e
add al,e
mov ah,4
imul ah 
mov cx,ax
mov eax,a2
;shl ecx,16
;mov cx,ax
idiv ecx
    mov a3,edx
mov a4,eax

mov ah,4ch
int 21h
end
Программа валится на делении, хотя операнды у меня получаются, вроде, верные. В чем может быть проблема?

Последний раз редактировалось Stilet; 15.03.2015 в 23:25.
iluxa1810 вне форума Ответить с цитированием
Старый 15.03.2015, 23:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
idiv ecx
Цитата:
если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;
Внимание вопрос: Каково значение в edx перед выполнением деления?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.03.2015, 23:37   #3
iluxa1810
 
Регистрация: 15.03.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Внимание вопрос: Каково значение в edx перед выполнением деления?

У меня там число в обратном коде лежит...
iluxa1810 вне форума Ответить с цитированием
Старый 16.03.2015, 07:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
У меня там число в обратном коде лежит
Читай внимательно что я написал
А потом читай учебник, особенно про команду деления. Особенно про то что должно лежать в DX и AX когда делится двойное слово.
Подсказка: ничего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2015, 19:05   #5
iluxa1810
 
Регистрация: 15.03.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Читай внимательно что я написал
А потом читай учебник, особенно про команду деления. Особенно про то что должно лежать в DX и AX когда делится двойное слово.
Подсказка: ничего.
Получается я должен все что у меня находится в edx и в eax я должен сдвинуть влево на 16 разрядов? Я гуглил разные ресурсы и там говорится лишь, что делимое должно быть в еdx
И eax...
P.s посоветуйте учебник. Я прочитал 150 стр юрова, но мне показалось, что в нем очень мало примеров... Естьчто лучше?
iluxa1810 вне форума Ответить с цитированием
Старый 16.03.2015, 19:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Получается я должен все что у меня находится в edx и в eax я должен сдвинуть влево на 16 разрядов?
Получается что опкод деления берет два двойных слова, сливает их воедино получая QWord и уже им оперирует. Отсюда получается что если в EDX число скажем 10 то деление происходит с числом 10+2^32+EAX. Но это грубая математика, но надеюсь правильно изобразил механизм. Т.е. ты делишь на огромнейшее число, получая ошибку.
Цитата:
Естьчто лучше?
Лучшее что есть это собственные мозги. Учебник не поможет, если нет желания учиться. С таким же успехом я могу порекомендовать Абеля, да что толку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка деления на 0 (delphi) Novikov_Dmitriy Помощь студентам 2 30.01.2013 19:24
Ошибка в методе половинного деления naty7773 Помощь студентам 1 03.12.2012 21:38
Ошибка деления на ноль Сметуська Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.03.2011 18:13
Ошибка деления на ноль El_Blasto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 16.12.2010 10:09
Ошибка деления на ноль nolz Помощь студентам 3 07.03.2010 13:14