Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программирование в 64-битном режиме 
:(
    Опции темы
sgi1981
Дата 26.1.2009, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 2
Всего: 10



Я использую FASM.
Я уже составил в нем программу использующую OpenGL под 32-битный режим.
Месяц назад заинтересовался написать какую-нибудь программу в FASM использующую OpenGL под 64-битный режим.
Но все попытки до вчерашнего дня оказались неудачей.

Вчера я узнал о методе передачи параметров функциям в 64-битном режиме на уровне машинного кода. Метод многим отличается.  Первые 4 агрумента, если они целочисленные, передаются через регистры rcx, rdx, r8, r9, если это вещественные, то через регистры xmm0, xmm1, xmm2, xmm3. Последующие опренды передаются через стек. Функция сама за собой не очищает стек. Для каждого операнда в стеке выделяется место кратное 8 байтам, в том числе и для первых 4 операндов в стеке резервируется место, для того чтобы вызываемая функция могла скопировать содержимое регистров в стек.
Теперь все работает нормально.

Но вопрос. А если, допустим, параметр - вещественное число расширенного формата (10 байт). Как оно передается ?


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
ir4y
Дата 27.1.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 3.6.2008

Репутация: нет
Всего: нет



а что есть вещественное число расширенного формата?
первый раз такую терминологию слышу если чесно

если long double то так 
Код

ir4y@localhost TEST % cat 123.cpp
long double foo(long double a)
{
return a*a;
}
int main()
{
foo(1);
}



ir4y@localhost TEST % objdump -d 123.o

123.o:     file format elf64-x86-64

Disassembly of section .text:
0000000000000000 <_Z3fooe>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   db 6d 10                fldt   0x10(%rbp)
   7:   db 6d 10                fldt   0x10(%rbp)
   a:   de c9                   fmulp  %st,%st(1)
   c:   c9                      leaveq 
   d:   c3                      retq   

000000000000000e <main>:
   e:   55                      push   %rbp
   f:   48 89 e5                mov    %rsp,%rbp
  12:   48 83 ec 10             sub    $0x10,%rsp
  16:   48 b8 00 00 00 00 00    mov    $0x8000000000000000,%rax
  1d:   00 00 80 
  20:   ba ff 3f 00 00          mov    $0x3fff,%edx
  25:   48 89 04 24             mov    %rax,(%rsp)
  29:   89 54 24 08             mov    %edx,0x8(%rsp)
  2d:   e8 00 00 00 00          callq  32 <main+0x24>
  32:   df c0                   ffreep %st(0)
  34:   b8 00 00 00 00          mov    $0x0,%eax
  39:   c9                      leaveq 
  3a:   c3                      retq   
ir4y@localhost TEST % 



PM MAIL   Вверх
sgi1981
Дата 29.1.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 2
Всего: 10



Хорошо. А если два параметра такие: первый - long double, второй - float ?


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.