Idiv assembler не работает
Почему idiv ebx; не работает???
#include <iostream>
#include <stdio.h>
int main()
{
setlocale(LC_ALL, "Russian");
__int32 A = 20;
__int8 B = 10;
__int16 C = 10;
__int32 D; //D=(A/B)*C
__int32 E; //E=(C^2/B)-A
__asm
{
movsx eax, A;//перемещаем A в регистр EAX
movsx ebx, B;//перемещаем B в регистр ebx
movsx ecx, C;//перемещаем C в регистр eCX
idiv ebx;//деление eax и ebx //////////////////////////////////////////////////////////////////////////Необработанное исключение по адресу 0x00E3195E в Vt3.exe: 0xC0000095: Integer overflow.
imul ecx;//умножение eax и ecx
mov D, eax;//перемещаем содержимое регистра EAX в D
movsx eax, C;//перемещаем С в регистр eAX
imul ecx;//умножение eax и ecx
idiv ebx;//деление eax и ebx
movsx ecx,A;//перемещаем A в регистр ECX
sub eax, ecx;//вычитаем из EAX содержимое регистра ECX
mov E, eax;//перемещаем содержимое регистра EAX в E
}
printf("Входные данные: А=%d, В=%d, С=%d", A, B, C);
printf("\nРезультат в 10-ной СС: D=%d E=%d",D,E);
printf("\nРезультат в 16-ной СС: D=%x E=%x",D, E);
return 0;
}
idiv ebx делит пару edx:eax, при этом edx не задан, а если в нём слишком большое число, то результат в eax не влезет и будет сгенегировано вышеприведённое исключение.
#include
#include
int main()
{
setlocale(LC_ALL, "Russian");
int32 A = 20;
int8 B = 10;
int16 C = 10;
int32 D; //D=(A/B)*C;
int32 E; //E=(C^2/B)-A;
{
movsx eax A;
movsx ebx B;
movsx ecx C;
idiv ebx;
imul ecx;
mov D eax;
movsx eax, C;//перемещаем С в регистр eAX
imul ecx;//умножение eax и ecx
x",D, E);
return 0;
}