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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2023, 13:57   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Только binary80 это уже тараканы разработчиков процессоров т.к. binary80 это как раз аппаратный тип у x87.
Так никто не спорит... от туда оно и полезло.

Цитата:
Сообщение от macomics Посмотреть сообщение
Но в стандарте написано
Это скорее фиксация устоявшейся на тот момент времени ситуации. Посмотрим, как реализуют нормальные 16, 32, 64, 128
p51x на форуме Ответить с цитированием
Старый 13.03.2023, 17:59   #12
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Если я правильно помню, тогда 16-битный float: sign(1-bit),characteristic(6-bit,offset=31),mantiss(10-bit),дополняется нормальной единицей;
32-битный float (x87): sign(1-bit),characteristic(8-bit,offset=127),mantiss(24-bit),дополняется нормальной единицей;
64-битный float (x87): sign(1-bit),characteristic(12-bit,offset=2047),mantiss(52-bit),дополняется нормальной единицей;
80-битный float (x87): sign(1-bit),characteristic(15-bit,offset=32767),mantiss(64-bit),без дополнительной нормальной единицы;
128-битный float: sign(1-bit),characteristic(23-bit,offset=4194303),mantiss(104-bit),без дополнительной нормальной единицы;

Уже и не помню где это прочитал. В каком-то тексте про ассемблер и программирование FPU. Так и не нашёл где это прочитал.
macomics вне форума Ответить с цитированием
Старый 13.03.2023, 19:14   #13
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
дополняется нормальной единицей
В описании плавучки, например, СМ-4 (PDP-11) употребляется термин "скрытый разряд". А то "нормальная" тянет за собой вопрос: а бывают и ненормальные ?
digitalis вне форума Ответить с цитированием
Старый 13.03.2023, 19:38   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
В описании плавучки, например, СМ-4 (PDP-11) употребляется термин "скрытый разряд". А то "нормальная" тянет за собой вопрос: а бывают и ненормальные ?
Нормальная единица - это образовано от термина нормаль. В нормализованной записи число в двоичном формате в старшем разряде мантиссы всегда содержит эту самую единицу. В некоторой документации её могут называть скрытой.
macomics вне форума Ответить с цитированием
Старый 18.04.2023, 09:59   #15
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

В продолжение темы подскажите
структура fd_set на сайте MS описана
Код:
typedef struct fd_set {
  u_int  fd_count;
  SOCKET fd_array[FD_SETSIZE];
} fd_set, FD_SET, *PFD_SET, *LPFD_SET;
Для 64 бит u_int fd_count = 4 байтам

Но при попытке вызова функции SELECT выводит
Код:
(10038) Сделана попытка выполнить операцию на объекте, не являющемся сокетом.
.

Если fd_count = 8 байтам
То все работает нормально.

На форумe fasm нашел include файл с описанием структуры fd_set для 64 бит
Код:
struct fd_set
       fd_count dd ?,?
       fd_array dq FD_SETSIZE dup(?)
ends
Собственно вопрос чему равен u_int для 64 бит и почему fd_count dd ?,??
mikado3333 вне форума Ответить с цитированием
Старый 18.04.2023, 13:02   #16
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от mikado3333 Посмотреть сообщение
Собственно вопрос чему равен u_int для 64 бит и почему fd_count dd ?,??
u_int для 64-бит = dd. А fd_count dd ?,? потому, что в структурах на C++ поля выравниваются и для 64-битных системы выравнивание соответственно на 64-бита.
macomics вне форума Ответить с цитированием
Старый 18.04.2023, 13:46   #17
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
в структурах на C++ поля выравниваются и для 64-битных системы выравнивание соответственно на 64-бита.
На сколько критично если в секции данных собственные структуры не выравнены на 64 бита?
В локальных данных на сколько я понимаю из за невыровненных структур указатель стека может "поехать", если макросы locals/endl не отработают.
mikado3333 вне форума Ответить с цитированием
Старый 18.04.2023, 13:50   #18
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Критично. Для Windows WORD не может начинаться с адресов не кратных 2, DWORD - 4, QWORD - 8, DQWORD - 16, YWORD - 32, ZWORD - 64. Отсюда и требование к выравниванию стека на 64 байта.

В рамках своей собственной программы (и ваших же библиотек) вы спокойно можете работать с невыравненными переменными в секциях данных. Но при передачи адресов структур функциям WinAPI вы будете получать ошибки, если они не выровнены по вышеописанным правилам.

В принципе требования Windows логичны и даже полезны. Поэтому их стоит придерживаться и в рамках своих программ. Они позволяют уменьшить количество промахов в линиях кэша и по TLB, а также дают возможность использовать команды с аппаратной оптимизацией доступа к памяти (movaps вместо movups - на некоторых процессорах такая оптимизация дает не плохой выигрыш по скорости).

Последний раз редактировалось macomics; 18.04.2023 в 14:09.
macomics вне форума Ответить с цитированием
Старый 18.04.2023, 15:12   #19
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Понял. Спасибо.
mikado3333 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA и Win64 Aent Microsoft Office Excel 4 22.11.2014 11:30
Win32/Win64 - драйвера и программы xe3 Win Api 10 02.06.2014 14:07
От Win32 к Win64 shuaal Visual C++ 0 25.10.2010 13:30
Lazarus компилит приложения для Win64? Marsel737 Lazarus, Free Pascal, CodeTyphon 3 18.10.2010 02:30
Windows 7 win64 и SQL Dux SQL, базы данных 0 17.03.2010 23:52