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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2014, 00:12   #1
aksjhfkjdhkfjsdhk
Заблокирован
 
Регистрация: 23.10.2012
Сообщений: 2
По умолчанию Округление чисел в assembler

Реализовать программно деление двух чисел и округления результата в разные стороны.
Написал код, ошибка C2400

Это код proc.asm
Код:
.686
.model flat, C
.data
	mask1 dw 1111111111111111b
	mask2 dw 0000001000000000b; где ХХ это нужная нам комбинация: 00 или 01 или 10 или 11

.code
	round PROC
		fnstcw  cw  ; сохраняем значение CR
		and  cw,mask1; очищаем 10 и 11 биты
		or cw,mask2  ; устанавливаем нужный режим
		fldcw cw  ; восстанавливаем
		ret
	round ENDP
END
Программа плюсов
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
extern "C" void round();
void main()
{
int res = 0, x = 20, z=3; // инициализация переменных
__asm{ // вызывает встроенный ассемблер
finit  // очистка математической машины, инициализация СП
fild x // загрузка целого числа x
fild z // загрузка целого числа z
round();
fdiv   // делит операнд-адресат на операнд-источник

fistp res // копирует значение из вершины стека сопроцессора в операнд-адресат
}
cout << res;
}
помогите пожалуйста разобраться глупому студенту)

Последний раз редактировалось Stilet; 25.11.2014 в 07:50.
aksjhfkjdhkfjsdhk вне форума Ответить с цитированием
Старый 25.11.2014, 00:30   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Чего вы хотели добится впихнув в асм блок с/с++ код?
p51x вне форума Ответить с цитированием
Старый 25.11.2014, 01:36   #3
aksjhfkjdhkfjsdhk
Заблокирован
 
Регистрация: 23.10.2012
Сообщений: 2
По умолчанию

я вроде как создал асм в проекте с++)
быть может extern void round(); на это указывает)
aksjhfkjdhkfjsdhk вне форума Ответить с цитированием
Старый 25.11.2014, 08:55   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
я вроде как создал асм в проекте с++)
Создали.

Цитата:
быть может extern void round(); на это указывает)
Не совсем. Но узнать несложно.

А теперь перечитайте мой вопрос и ответьте. Если туго доходит могу расжувать - чего вы хотели вставив кусок кода с с/с++ синтаксисом в блок асм кода с асмсинтаксисом?
p51x вне форума Ответить с цитированием
Старый 25.11.2014, 13:52   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

aksjhfkjdhkfjsdhk, это тебе намекают на то, что нужно сделать CALL, если еще не понял.
f.hump вне форума Ответить с цитированием
Старый 25.11.2014, 13:58   #6
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

aksjhfkjdhkfjsdhk, а если вообще ничего не понял, то нужно сделать CALL round
coNsept вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Округление чисел turtles Общие вопросы по Java, Java SE, Kotlin 1 16.08.2011 11:22
округление чисел world12_tk Помощь студентам 3 26.12.2009 23:06
Округление чисел Vikelf Помощь студентам 1 01.06.2009 12:16
Округление чисел: вопрос rzrwolf Microsoft Office Excel 8 11.01.2009 21:06
Округление чисел в Excel Bacardi_uk Microsoft Office Excel 3 16.05.2007 18:27