Я работаю над программой Mix на С++ и языке ассемблера (8086), чтобы найти наименьшее число из массива. Вот мой код
#include<iostream>
#include<conio.h>
using namespace std;
void main()
{
__int16 a[5],x,y,res;
int i,j;
y=999;
cout<<"\n Enter 5 Numbers:";
for(i=0;i<5;i++)
{
cin>>a[i];
}
_asm{
mov bx,y
}
//Finding smallest
for(i=0;i<5;i++)
{
x=a[i];
_asm{
mov ax,x
cmp ax,bx
jge nxt
mov bx,ax
nxt:
}
}
_asm{
mov res,bx;
}
cout<<"\n Smallest Element:"<<res;
getch();
}
Приведенный выше код написан в Visual Studio 2010 и работает нормально. Но когда я обновляю тот же код для Turbo C++ (т. е. меняю «iostream» на «iostream.h», удаляю «используя пространство имен std;», меняю «__int16» на «int» и т. д.), он не работает. Ответ, полученный после выполнения, неверен.
Вот моя программа TC++ для того же
#include<iostream.h>
#include<conio.h>
void main()
{
int a[5],x,y,res;
int i,j;
y=999;
cout<<"\n Enter 5 Numbers:";
for(i=0;i<5;i++)
{
cin>>a[i];
}
_asm{
mov bx,y
}
//Finding smallest
for(i=0;i<5;i++)
{
x=a[i];
_asm{
mov ax,x
cmp ax,bx
jge nxt
mov bx,ax
}
nxt:
}
_asm{
mov res,bx;
}
cout<<"\n Smallest Element:"<<res;
getch();
}
Почему TC++ и Visual Studio 10 не дают одинакового ответа?
Turbo Debugger
(td.exe
), вы сможете увидеть дизассемблированиеmain
и то, какfor(i=0;i<5;i++)
разрушает встроенный ассемблерный код. - person Alexey Frunze   schedule 29.03.2013