Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FFFFFFFF

13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
Всем доброго времени суток!
Создалась следущяя проблема,а проблема в следующем.
Компилирую и запускаю след. код :

C++
Код:
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
#include <iostream>
using namespace std;
int s =6;
extern "C"
{
int pluse();
};
int main(int argc, char* argv[])
{
  int y=pluse();
  cout << y;
  system("pause");
        return 0;
}
//---------------------------------------------------------------------------

Assembler
Код:
title pluse
.386
.model large,C
.data
        extrn s:DWORD
.code
        public c pluse
        pluse proc far
                mov eax,2
                add s,2
                mov eax,s
        pluse endp      
end

Очень странно,ведь я не написал в процедуре асемблеровского кода команду возврата значения (ret).Компилируется,возвращяет значения из регистра eax.Всё в норме!
Пытаюсь вставить ret,компилирует,выдаёт ошибку,ссылается на адрес конца файла (FFFFFFF)
Подозреваю в этом регистр CS.Хотя не знаю,поэтому и спрашиваю.В чём же ошибка?Помогите плизз!!!!!
360
06 декабря 2011 года
P*t*
474 / / 15.02.2007
Возвращаемое значение - это то, что на момент завершения процедуры лежало в eax.
ret - это команда вернуться из процедуры, никаких значений она не возвращает.
В данном случае она не нужна т.к на endp также происходит выход из процедуры.
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
спасибо огромное!!!!всё встало во свои места.попутный вопрос,регистр еах может содержать тип float?Если нет,то как это можно организовать,чтоб на выводе был вещественный тип?Просто раньше я программировал на с++,сейчас сел за asm ,появился предмет Архитектура компьютеров в ВУЗ'е.Вот,делаю лабы.....
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
ну тут нужно определить extrn (имя переменной):dword
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
затем результирующие записать в эту переменную....
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
но функ-я idiv такая муторная....будем разбираться =)
360
06 декабря 2011 года
P*t*
474 / / 15.02.2007
Может.
EAX - это просто 32 бита. Но некоторые машинные команды воспринимают их как целое число, а некоторые - как вещественное.
Если в программе на Си будет написано float pluse(), то Си те же биты будет воспринимать как вещественное число.
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
Аха!!!!как я посмотрел idiv комманда записывает в региcтры eax частное и edx,тока как их поместить в переменную типа DWORD???
360
06 декабря 2011 года
P*t*
474 / / 15.02.2007
Не очень понял вопрос.
DWORD - 4 байта (EAX)
WORD - 2 байта (AX - половина EAX)
BYTE - 1 байт (AH и AL - половинки AX)

mov s, eax как раз поместит DWORD из EAX в s
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
ммм....на выходе мне нужен вещественный тип данных,к примеру дана функ-я 17/2 .На выходе естесно нужен вещ тип данных.....Хотя я тут подумал...если в две различные переменные типа int(dword) вернуть значения частного и остатка,то можно выкрутится из проблемы.А затем в с++ выдать их через точку =)
int x; x < eax
int y; y < edx
cout << x << "." << y;
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
после использования вун-ии idiv
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
дел в том,что мне в лабараторке дана функция (-2 * с + d * 82)/(a / 4 - 1),вот я её реализую ,все вычисления по сути дела должен заниматся asm модуль.Начал потихонечку тестить комманды,напаролся на мелкие проблемы...
13K
06 декабря 2011 года
karimchik
65 / / 16.06.2008
вроде потихонечку получается!!!!!!!СПАСИБО ВАМ ПРИБОЛЬШОЕЕЕЕЕ!!!!!Вы мне оказали очень большую услугу в начинании освоения столь непростого языка программирования!!!!!
360
06 декабря 2011 года
P*t*
474 / / 15.02.2007
Вы непонятно формулируете мысли. Приходится догадываться, что вам нужно.
Наверное вам нужно это:
http://osinavi.ru/asm/FPUexpansion/2.html
http://osinavi.ru/asm/FPUexpansion/3.php
нужно будет написать что-то вроде
 
Код:
fild 17
fild 2
fdiv
fstp eax


P.S не надо писать много сообщений по одной строчке - лучше используйте кнопку "редактировать" снизу
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог