169 похожих чатов

А можете как-то проверить меня по знаниям по ассемблеру?

132 ответов

317 просмотров

x86?

A-A Автор вопроса
A A
Да

Чем отличается movsx и movzx

The Bird of Hermes
Чем отличается movsx и movzx

гут фор бегинерс, тов. бро

The Bird of Hermes
Чем отличается movsx и movzx

ог бы что полегче спросить, а то вдруг ещё не сталкивался он с этим

A-A Автор вопроса
A A
Не знаю

в каких регистрах команда mul получает и возвращает данные

Mixail Frolov
ог бы что полегче спросить, а то вдруг ещё не стал...

Есть гугл. Если не понял в гугле - заодно и вопрос задать можно)

что делает инструкция db 'ffffffffffffff',90h

int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
что делает инструкция db 'ffffffffffffff',90h

Оно у тебя ещё и в аски. Он вообще про ассемблер спрашивал проверить, а не знание опкодов 😁

тогда второй вопрос, есть ли тут ошибка? mov eax, dword [esp+esp]

Напиши код копирования памяти из одного места в другое. На входе: esp-4: куда копировать esp-8: откуда копировать esp-12: число байт учитывай ситуацию, когда число байт кратно 2 или 4

Афраний
Напиши код копирования памяти из одного места в др...

Если источник и назначение местами поменять, будет вообще идеально.

Афраний
Напиши код копирования памяти из одного места в др...

-4? Отрицательное смещение на стеке? С огнём играешь

КТ315
Так это push обычный.

Не, это явно функция

The Bird of Hermes
-4? Отрицательное смещение на стеке? С огнём играе...

Стек растет в сторону уменьшения адресов - не забывай

The Bird of Hermes
-4? Отрицательное смещение на стеке? С огнём играе...

бывает, если написать комментарий что со стеком аккуратно код менять

Mixail Frolov
бывает, если написать комментарий что со стеком ак...

У него на входе параметры по отрицательному смещению

The Bird of Hermes
Не, это явно функция

Смотри: esp-4 = источник esp-8 = назначение esp-12 = сколько А теперь call memcpy Где тут огонь, если это просто push?

Афраний
Да, это memcpy

Но она хороший претендент на переписывание чтоб научиться работать с циклами и памятью

КТ315
Смотри: esp-4 = источник esp-8 = назначение esp-1...

Ну тогда надо добавить sub esp, 12 перед вызовом

The Bird of Hermes
Ну тогда надо добавить sub esp, 12 перед вызовом

Не надо. Все будет уже там... stdcall же, ну

Афраний
Да, это memcpy

Просто тебя могли не так понять, в плане esp-4 - это на момент вызова функции, или уже внутри функции. Вот если уже внутри функции аргумент лежит по -4 - тогда да. Но это невозможно, он затрётся адресом возврата.

Афраний
На момент вызова

Вот тогда всё нормально. Правда поменять бы источник и назначение, и в итоге можно просто вызвать memcpy))

Афраний
Не надо. Все будет уже там... stdcall же, ну

Смотри как оно будет выглядеть: Когда ты делаешь push, стек растет в сторону уменьшения Допустим я сделаю push count push src push dst Стек после этого будет выглядеть так: [esp] - dst [esp + 4] - src [esp + 8] - size Соответственно при вызове эти значения сместятся ещё на +4, потому что стек уменьшится на 4

The Bird of Hermes
Смотри как оно будет выглядеть: Когда ты делаешь p...

Если мы хотим именно по отрицательным грузить, то делать надо так mov [esp-4], size mov [esp-8], src mov [esp-12], dst sub esp, 12

Афраний
Напиши код копирования памяти из одного места в др...

Да и кстати, rep movsb все равно быстрее, чем movsw, movsd и movsq. Нет смысла кратность учитывать😁

The Bird of Hermes
Да и кстати, rep movsb все равно быстрее, чем movs...

так за одну инструкцию 2 или 4 байта уйдет, не один же

КТ315
С чего ты взял?

Читал где-то мануал по оптимизации, щас поищу

The Bird of Hermes
Читал где-то мануал по оптимизации, щас поищу

нам во время учебы еще препод говорил: если надо копировать большие куски памяти - копируйте максимально возможными блоками, а остаток от деления числа байт на длину блока добивайте как получитсмя. В скорости кратно выиграете

The Bird of Hermes
Читал где-то мануал по оптимизации, щас поищу

Сейчас посмотрел, и ничего подобного я не нашёл. Агнер пишет, что обязательно при использовании rep movs - блоки должны быть выравнены по границе 32 байта, в остальных случаях самый быстрый способ будет с ZMM\XMM\YMM регистрами. Таким образом, по скорости: 1. SSE/AVX копирование 2. rep movsd/q с выравненными данными 3. rep movsb 4. Обычный цикл с побайтовым копированием

КТ315
Сейчас посмотрел, и ничего подобного я не нашёл. А...

Почитал что есть какая-то улучшенная версия rep movsb

The Bird of Hermes
screenshot

Там написано, что тесты проводились на адресах, которые были выравнены на 16 байт. Возможно, если бы для movsd выравнять на 32\64, было бы быстрее\одинаково.

КТ315
Там написано, что тесты проводились на адресах, ко...

Ну выравнивание на 32/64 уже странно ожидать

The Bird of Hermes
Ну выравнивание на 32/64 уже странно ожидать

Речь про скорость. А странно... Для кого-то странно и писать свою реализацию вместо использования memcpy. А я вообще не заморачиваюсь, и всегда movsb использую.

КТ315
Речь про скорость. А странно... Для кого-то странн...

Ну для выровненных адресов логичнее просто отдельную функцию завести

The Bird of Hermes
Ну для выровненных адресов логичнее просто отдельн...

Мне вообще на скорость без разницы. По нескольким причинам: 1. Я по-умолчанию всегда быстрее высокоуровневых компиляторов, мне даже стараться не надо 2. Я пишу программы, мне пофиг

КТ315
Мне вообще на скорость без разницы. По нескольким ...

поправка - ты пишешь прикладные программы, не нацеленные на большие математические вычисления. В прикладных прогах скорость почти и не нужна, всё равно события ждать.

Mixail Frolov
поправка - ты пишешь прикладные программы, не наце...

Сейчас программы с ботанскими вычислениями и не в моде, поэтому и всё на NodeJS, Python и .NET.

The Bird of Hermes
Ну для выровненных адресов логичнее просто отдельн...

а не проще нормальную функцию написать, которая всё сама сделает. Как например при получении физического адреса из виртуального

КТ315
Сейчас программы с ботанскими вычислениями и не в ...

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

Mixail Frolov
а даже если они нужны, то есть уже куча готовых би...

Вот именно. А я к программе на ассемблере её просто подключу, и всё.

Mixail Frolov
а даже если они нужны, то есть уже куча готовых би...

Недавно вот экспериментировал, к программе на ассемблере подключил библиотеку на Go, и ещё одну на Rust. Думаю, можно ещё на .NET подключить.

КТ315
Недавно вот экспериментировал, к программе на ассе...

на .net скорее всего проблемы будут, вм грузить придётся скорее всего. А go это же по сути Си современный

Александр Белокопытов
Нет, это совсем не так

Достаточно двух слов: сборщик мусора

Mixail Frolov
на .net скорее всего проблемы будут, вм грузить пр...

Тут прелесть в том, что только на ассемблере я могу подключить библиотеку на любом языке. Условно, есть какая-то крутая библиотека, но она только на Go. Мне не надо учить Go, я могу просто затолкать эту библиотеку внутрь, и вызывать её функции по её соглашениям. Не зная ассемблера, я либо танцевал бы с бубном, либо сидел, и учил бы Go со слезами на глазах.

Mixail Frolov
на .net скорее всего проблемы будут, вм грузить пр...

GO современный Си? Я слышал что на нём бэк пишут

.
микросервисы пишут

Однохренственно

КТ315
Тут прелесть в том, что только на ассемблере я мог...

Кстати, хотите, я покажу как я в одном проекте подключаю библиотеки на: Rust, Ruby, Go, .NET и Java? Всё сразу.

.
да

Хорошо.

КТ315
Кстати, хотите, я покажу как я в одном проекте под...

лучше скажи зачем столько подключать и какой конечный софт?

У самурая нет цели, есть только путь. Классика же.

Mixail Frolov
он не обязателен

зато система ошибок просто шикарная

Или вообще всякой дичи вроде лямбда-выражений

Mixail Frolov
зато система ошибок просто шикарная

Коды возврата теперь шикарная система ошибок? Или ты про ошибки компиляции?

The Bird of Hermes
Ну для выровненных адресов логичнее просто отдельн...

можно вообще заолгоритмить, чтоб было без разницы выровнены адреса или нет.

Mixail Frolov
лучше скажи зачем столько подключать и какой конеч...

Конечный софт: сервис на ассемблере Ruby on Rails с вычислениями бесконечной точности (BigRational, C#), безопасным выводом информации (Rust), и используя время в этой отладочной информации используя библиотеку Carbon (Go).

Александр Белокопытов
Коды возврата теперь шикарная система ошибок? Или ...

да, про коды возврата. Это то что удобно, а не ставить везде эти чёртовы исключения и думать как с ними что-то сделать

КТ315
Конечный софт: сервис на ассемблере Ruby on Rails ...

Давно хотел RubyOnRails на ассемблере написать, ай да хорошо.

Aiwan \ (•◡•) / _bot
можно вообще заолгоритмить, чтоб было без разницы ...

Ну тогда будет в рантайме затрачено время на эту самую алгоритмичность. Тут ЯВУ намного легче - коноплятор заранее знает, что, где и как выровнено, какая память пойдет функции в зависимости от того, как эта память была выделена и вызывать соответствующую функцию

КТ315
Конечный софт: сервис на ассемблере Ruby on Rails ...

отметите если получится сделать, интересно посмотреть

КТ315
Конечный софт: сервис на ассемблере Ruby on Rails ...

ну допустим, хотя по описанию кажется избыточным использование go либы

The Bird of Hermes
Ну тогда будет в рантайме затрачено время на эту с...

Ну это при условии того, что компилятор умный и обо всем этом знает

КТ315
Это получится.

В моих словах нельзя сомневаться. Можно только надеяться, что я выделю на это время, сейчас я валяюсь на кресле и смотрю "Пираты Карибского моря".

КТ315
В моих словах нельзя сомневаться. Можно только над...

Ты ж говорил не надо фильмы смотреть, надо только на ассемблере писать

Mixail Frolov
ну допустим, хотя по описанию кажется избыточным и...

Я это с пальца высосал. Мне лень было искать библиотеку на Go, аналогов которой не существует в других языках. Подставь вместо того, что я написал, что-то: 1. Что существует только в Rust 2. ... только в Go 3. ... C# 4. ... Ruby И получится: ассемблер.

The Bird of Hermes
Только в Java😁

Нуу, её тоже можно. Всего-лишь засунуть программку в виртуальную машину Java, исполнить, и вытащить вывод функции на лету. Чудеса ревёрса, талант ассемблера.

Однако зачем выполнять в принципе лишние операции, если можно не выполнять

КТ315
Я это с пальца высосал. Мне лень было искать библи...

не уверен что такие либы существуют. А вообще я за полностью асм софт, так что когда stm8 и AT команды на модем?

КТ315
Ты про что?

про замок в гараж

Mixail Frolov
про замок в гараж

А модем тут при чем

The Bird of Hermes
А модем тут при чем

с сигнализацией объединять

Как не знает, если у функций выделения памяти все документировано?

Mixail Frolov
про замок в гараж

Тебе как будто это нужнее, чем мне самому. Когда захочу, тогда и напишу.

Mixail Frolov
про замок в гараж

Купи детали, 300 руб. всего-лишь, и сам напиши для себя.

КТ315
Тебе как будто это нужнее, чем мне самому. Когда з...

да у меня тут уже 2 месяца одни дожди идут, код нормально писать не получается

Aiwan \ (•◡•) / _bot
эм, мы про memcopy говорим?

Ну. Да. Коноплятор может в компайл-тайме понимать, откуда у него где будут адреса

Mixail Frolov
да у меня тут уже 2 месяца одни дожди идут, код но...

Шутишь, у меня когда дождь начинается - это +1000 к мотивации писать код. Не ценитель ты, ой не ценитель. Я уже которую неделю молюсь, чтоб дождь начался.

Mixail Frolov
это можно и в рантайме определить

Зачем определять что-то в рантайме, если можно в компайл-тайме?

КТ315
Шутишь, у меня когда дождь начинается - это +1000 ...

Писать код на ассемблере ночью под спокойную музыку, пока за окном капает дождь - о большем и мечтать нельзя.

КТ315
Шутишь, у меня когда дождь начинается - это +1000 ...

ну я дождь тоже люблю, но ни когда од почти без остановок 2 месяца идёт, даже на огороде не отвлечься от дум лишних

КТ315
Писать код на ассемблере ночью под спокойную музык...

кружечка кофе и небольшой ветерок со свежим немного прохладным воздухом

КТ315
Писать код на ассемблере ночью под спокойную музык...

Извините за офтопик, но такое поэтическое описание процесса толкает на визуализацию.

КТ315
Я это с пальца высосал. Мне лень было искать библи...

Любой язык можно прилепить к любому другому, ты ничего нового не изобрёл.

Alexander Morozov
screenshot

жалко чувака, на моник не заработал.

Aiwan \ (•◡•) / _bot
жалко чувака, на моник не заработал.

Я бы не стал вглядываться в картинки от нейросети, можно весь день потом смеяться.

The Bird of Hermes
Неа. thiscall в Си как вызывать?

Ой, да не надо спорить. Пусть у него в голове в С можно .NET и Java библиотеки подключать, и Go библиотеку внутрь линковать с С-программой.

КТ315
Ой, да не надо спорить. Пусть у него в голове в С...

Любой язык поддерживает экспорт и импорт сишных символов, соответственно достаточно для нужных языков сделать такую прослойку

Александр Белокопытов
Любой язык поддерживает экспорт и импорт сишных си...

Ну то есть не язык прикрутить к любому другому, а на том же языке сделать прослойку сишную, чтобы можно было обращаться)

Alexander Morozov
screenshot

Ты же технарь, ей богу, выкинь это чудо.

КТ315
Ты же технарь, ей богу, выкинь это чудо.

Я хочу сам написать движок для генеративной сети!

как успехи?

The Bird of Hermes
Да и кстати, rep movsb все равно быстрее, чем movs...

Я тоже сталиквался - компиль обнулял массивы командой stosb, я дооптимизировал заменив на stosq, и все стало в два раза медленнее. Но это походу только на коротких массивах, а так одинаково.

randomize usr
Я тоже сталиквался - компиль обнулял массивы коман...

Ну и смысл париться с movsq когда movsb проще тогда

Факт.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта