s54820
а вот как сложные типы пихаются я понятия не имею
Тоже описано в ABI. Мелкие типы расширяются до интов, структуры по необходимости выравниваются до размера, кратного инту и копируются, плавающая точка может передаваться через FPU/SIMD-регистры. В общем, всё зависит от конкретной платформы.
sc
так
sc
а что насчёт структур? больших
sc
платформа х86
sc
лол норм
Влада
Привет) Подскажите, пожалуйста, почему на выходе я получаю "Ошибка сегментирования"? Но результат выводится
global main
extern printf
extern scanf
section .data
formatIn db "%f %f %f",0
formatOut db "numbers is %f",10,0
section .bss
x resq 1
b resq 1
a resq 1
r_s resq 1
section .text
main:
push x
push b
push a
push formatIn
call scanf
add esp,28
fld dword[a]
fld dword[a]
fld dword[b]
fsub
fdiv
fld dword[a]
fld dword[b]
fadd
fld dword[b]
fld dword[x]
fadd
fdiv
fsin
fmul
fld dword[b]
fld dword[a]
fld dword[b]
fsub
fld dword[b]
fld dword[x]
fadd
fmul
fdiv
fsub
fstp dword[r_s]
fld dword [r_s]
sub esp,8
fstp qword [esp]
push formatOut
call printf
add esp,12
ret
Eugene
Привет) Подскажите, пожалуйста, почему на выходе я получаю "Ошибка сегментирования"? Но результат выводится
global main
extern printf
extern scanf
section .data
formatIn db "%f %f %f",0
formatOut db "numbers is %f",10,0
section .bss
x resq 1
b resq 1
a resq 1
r_s resq 1
section .text
main:
push x
push b
push a
push formatIn
call scanf
add esp,28
fld dword[a]
fld dword[a]
fld dword[b]
fsub
fdiv
fld dword[a]
fld dword[b]
fadd
fld dword[b]
fld dword[x]
fadd
fdiv
fsin
fmul
fld dword[b]
fld dword[a]
fld dword[b]
fsub
fld dword[b]
fld dword[x]
fadd
fmul
fdiv
fsub
fstp dword[r_s]
fld dword [r_s]
sub esp,8
fstp qword [esp]
push formatOut
call printf
add esp,12
ret
Почему add esp,28, когда в стек засунуно 16 байт (4*4)?
Eugene
А дальше будет переполнение стека fpu, т.к. fadd, fdiv и пр без суффикса p.
Влада
А вот такую запись можно использовать? то есть выражение a/(a-b)
fld dword[a]
fld dword[a]
fld dword[b]
fsub
fdiv
Влада
Eugene
И ещё. Резервируется qword, а работа идёт с dword.
Вообще, можно писать fadd qword[x] и т.д.
Aiwan \ (•◡•) / _bot
Влада
Aiwan \ (•◡•) / _bot
следи внимательно что находится в каждом регистре после выполнения каждой инстукции
Aiwan \ (•◡•) / _bot
прочитай что такое обратная польская запись, стек fpu работает по такому принципу
Влада
а кто-то работал с MARS? как сделать, чтобы отображались значения в десятичной системе, а не 16?
Aiwan \ (•◡•) / _bot
твою запись a/(a-b) можно представить как a a b - /
fld dword[a]
fld dword[a]
fld dword[b]
дальше идет вычитание, но если сделать fsub то получим b-a, (по умолчанию fsub разворачивается в fsub st0,st1) значит надо поменять местами операнды
fsub st1,st0
результат помещается в st1. но так как нам содержимое st0 уже не нужно то добавляем p
fsubp st1,st0
итого в st0 у нас результат a-b, в st1 - a
дальше делим ст1/ст0
fdiv st1,st0
результат опять будет в st1, а st0 нам не нужен, значит выталкиваем st0 добьавлением p
fdivp st1,st0 - ответ в st0
итого полный код
fld dword[a]
fld dword[a]
fld dword[b]
fsubp st1,st0
fdivp st1,st0
Влада
твою запись a/(a-b) можно представить как a a b - /
fld dword[a]
fld dword[a]
fld dword[b]
дальше идет вычитание, но если сделать fsub то получим b-a, (по умолчанию fsub разворачивается в fsub st0,st1) значит надо поменять местами операнды
fsub st1,st0
результат помещается в st1. но так как нам содержимое st0 уже не нужно то добавляем p
fsubp st1,st0
итого в st0 у нас результат a-b, в st1 - a
дальше делим ст1/ст0
fdiv st1,st0
результат опять будет в st1, а st0 нам не нужен, значит выталкиваем st0 добьавлением p
fdivp st1,st0 - ответ в st0
итого полный код
fld dword[a]
fld dword[a]
fld dword[b]
fsubp st1,st0
fdivp st1,st0
Спасибо огромное, за объяснение)
Eugene
Кто-нибудь знает, Windows кэширует сжатые NTFS файлы в памяти в упакованном виде или в распакованном?
Eugene
Danil
Судя по всему, в распакованном :)
Думаю на политику кеширования NTFS распространяется https://docs.microsoft.com/en-us/windows/win32/fileio/file-caching
https://docs.microsoft.com/en-us/windows-server/storage/file-server/ntfs-overview
Влада
Привет) А подскажите, пожалуйста, в чем разница когда стоит число 51,52,54?
електр🟢нік ✙🟠рчбеч ඞ
мне кажется, это номер системного вызова
Какой страшный Юля...
Eugene
Фернандо Юлия, однако.
Danil
Eugene
Существуют ли алгоритмы блокировок spin-lock без сложных атомарных операций, т.е. без использования префиксов lock, короче говоря?
Eugene
Ну и без xchg, разумеется.
Danil
Eugene
Vladimir
Vladimir
Обе переменные в кэше одного проца, другой о них ни сном ни духом
Eugene
Только скорость... короче, lock inc N работает быстрее, чем эта бадяга.
И обычный spin-lock с xchg вокруг inc'а тоже быстрее работает.
Жаль...
Eugene
Короче, протестил я несколько алгоритмов: Петерсона, Деккера, Ламперта, xchg-spinlock и lock inc.
По убыванию скорости:
0. Без блокировок вообще (но с ошибками) [45-60K] 🤣
1. lock inc [30-31K]
2. xchg (логично, что медленнее lock inc'а) [19-21K]
3. Петерсон [10K]
4. Деккер [9.5K]
5. Лампорт [7.5K]
Числа в скобках — это кол-во inc'ов в секунду (в моих тестах на моём компе).
Но я только с двумя потоками пробовал.
Везде (кроме 0 и 1) стоят mfence'ы, без которых эти Петерсоны, Деккеры и Ламперты не работают, для xchg тоже поставил на всякий случай.
Короче, эти без-lock-овые алгоритмы годятся только для систем, в которых lock'и в принципе отсутствуют.
p.s. Есть ещё Шиманского (Szymański), а также Эйзенберга и МакГира (Eisenberg & McGuire), но они ещё более замороченные какие-то. Пока даже не стал тестить их.
Danil
Короче, протестил я несколько алгоритмов: Петерсона, Деккера, Ламперта, xchg-spinlock и lock inc.
По убыванию скорости:
0. Без блокировок вообще (но с ошибками) [45-60K] 🤣
1. lock inc [30-31K]
2. xchg (логично, что медленнее lock inc'а) [19-21K]
3. Петерсон [10K]
4. Деккер [9.5K]
5. Лампорт [7.5K]
Числа в скобках — это кол-во inc'ов в секунду (в моих тестах на моём компе).
Но я только с двумя потоками пробовал.
Везде (кроме 0 и 1) стоят mfence'ы, без которых эти Петерсоны, Деккеры и Ламперты не работают, для xchg тоже поставил на всякий случай.
Короче, эти без-lock-овые алгоритмы годятся только для систем, в которых lock'и в принципе отсутствуют.
p.s. Есть ещё Шиманского (Szymański), а также Эйзенберга и МакГира (Eisenberg & McGuire), но они ещё более замороченные какие-то. Пока даже не стал тестить их.
Спасибо за вашу информацию, было бы великолепно, если бы вы могли еще и поделиться небольшими снипетами вашей реализации, благодарю
Aiwan \ (•◡•) / _bot
студенты в агонии
Eugene
Да я вот всё жду, когда 1000 будет.
Уже не первый месяц 900+, а потом, видимо, происходит чистка, и хопа — 800 :))
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
эт как юбилей при 256
Eugene
И это тоже.
Eugene
Мне когда было 32, я тоже говорил, что у меня круглая дата :))
s54820
Aiwan \ (•◡•) / _bot
Eugene
round data (data bus)
Eugene
В винде в 32-х битах (в т.ч. в WoW64) CS всегда = 23h, а в 64-х битах = 33h ?
Под всегда я имею в виду версии винды, начиная с NT, скажем? Или с какой версии так стало?
Eugene
Потестил сам: в обычной 32-битной винде CS = 1Bh (до 7 точно, в 10-ке не знаю), только в WoW64 = 23h (7 и 10, других у меня нет).
У кого есть 32-битная 10-ка и 64-битная XP, можете потестить?
Aiwan \ (•◡•) / _bot
демкой занимаешься?
Eugene
Aiwan \ (•◡•) / _bot
я что то близкое к этой теме переписываю. для фасма утилку, которая собиратет экспортируемые функции из dll в таком формате
Aiwan \ (•◡•) / _bot
в fasmeditor2.0 она есть, но каждый раз открывать редактор для этой функции напрягает
Eugene
CB
Всем, привет. Есть небольшая задача по Assembler. В этом канале можно найты специалыста на выполнение.? Если нет, то может посоветуете другой канал. Заранее спасибо.
Aiwan \ (•◡•) / _bot
Marsel
Подскажите как в Int сохранить число 011111111, чтобы оно не превращалось в 11111111?
Aiwan \ (•◡•) / _bot
Marsel
нужно чтобы при побитовой операции например (0110&0101) из int выходило именно 0110 и 0101 а не 110 и 101
Marsel
0110 это 6 а 110 это 110
Marsel
есть конечно что то типа std::bitset<32>(n) но мне надо в инте просто схоранить типа в бинарном виде числа
Marsel
у меня калькулятор показывает 72 это 1001000
s54820
А у меня printf("%d\n", 0110) показывает, что 72.
Marsel
cout тоже показывает что это 72
Marsel
дак мне то не надо в 8ричной
Marsel
в принципе мне не важно как выводит на консоль число
s54820
Дак это вопрос парсинга числа. Распарсишь, как восьмеричную — будет 72, распарсишь как десятичную — будет 110, как двоичную — 6.
Marsel
дорисовать не получится в инте
s54820
Кто запретил? Ты задачу озвучь хотя бы. Не надо в инте рисовать, ты в строке с отформатированным числом рисуй. В инте и так бесконечное количество нулей слева (ну, или единиц, если он отрицательный).