Показать сообщение отдельно

  #751  
Старый 14.11.2008, 12:49
Vasiliusis
Новичок
Регистрация: 14.11.2008
Сообщений: 2
Провел на форуме:
1684

Репутация: 0
По умолчанию

Добрый день.
Скажите пожалуйста, почему различаются результаты при выполении арифметических операций на чистом С++ и при использовании АССЕМБЛЕРНОЙ ВСТАВКИ?

Код:
#include <iostream>
#include <windows.h>
#include <iomanip>
using namespace std;

BYTE ddS = 10;
BYTE ccS = 10;
BYTE aS = 6;

WORD NUM;

void main()
{
	__asm
	{
		MOV AL, ccS
		SUB AL, aS
		INC AX
		PUSH AX
		MOV AL, ccS
		MOV BL, ddS
		CBW
		DIV BL		
		PUSH AX		
		MOV AL, 3
		MOV BL, aS
		MUL BL
		MOV BL, 2
		CBW
		DIV BL
		POP BX
		ADD AL, BL
		POP BX
		CBW
		DIV BL
		MOV NUM, AX
	}
	cout<<"ASSEMBLER = "<<NUM<<endl;
	cout<<"C++ = "<<setprecision(3)<<showpoint<<(static_cast<float>(ccS)/ddS+(3*aS)/2)/(ccS-6+1)<<endl;
	system("PAUSE");
}
Сейчас все сходится.

Но можете взять отличные от этих значения - увидите результат.
Нужно для вывода по лабе.

Благодарствую.
 
Ответить с цитированием