Size: a a a

Ассемблер

2021 May 21

SZ

Sergey Zhmylove in Ассемблер
Ну, для начала можно в эмуляторе все отточить, зачем перегружать постоянно
источник

SZ

Sergey Zhmylove in Ассемблер
Но это не будет система, которая сделала многие вещи за занавеской
источник

SZ

Sergey Zhmylove in Ассемблер
И программирование не будет вырождаться в 21h
источник

A

Aleksandr in Ассемблер
и опять приходим к тому, что у нас внешний загрузчик, но теперь уже эмулятор
источник

A

Aleksandr in Ассемблер
да что тебе эти 21h сделали?
источник

AA

Anonimus Anonim in Ассемблер
Программирование на линукс какие прерывания используются
источник

A

Aleksandr in Ассемблер
0x80
источник

A

Aleksandr in Ассемблер
для x86-64 - syscall
источник

SZ

Sergey Zhmylove in Ассемблер
Нет, загрузчик ты пишешь сам. Эмулятор эмулирует железо
источник

SZ

Sergey Zhmylove in Ассемблер
Да то, что это как говорить, что пишешь на си, а в действительности делать execl(python)
источник

A

Aleksandr in Ассемблер
и выступает своего рода загрузчиком, загружая твой код в память
источник

AA

Anonimus Anonim in Ассемблер
Функция 0003h это же переключение в текстовый режим?
источник

A

Aleksandr in Ассемблер
не понимаю о чем ты
источник

C

Cofeefee in Ассемблер
Мне консультация нужна, есть процедура, нереентерабельная, и в неё из двух-трех потоков приходит вызов. Как мне блокировать остальные вызовы, пока я один отрабатываю?

Что-то вроде CriticalSection, пока он не завершился,  все остальные вызовы холдятся.

Да есть, всякие Mutex, Critical Section и прочий вагон добра, м.б уже решал кто эту проблему?

Вот как выглядит в асме:

Non_reentrant_fn: push rcx rdx rbx
Lock (resource)
Blablabla...

Так вот пока я делаю push регистров, прилетает второй и третий вызов моей функции. Т.к стек общий, он тотально портится и программа крашится.

Без сохранения регистров вначале - никак, т.к Lock(resource) портит регистры.

Примерно такая же проблема, как с DOS, в котором нельзя было вызывать самого себя из-за нереентерабельности.

Как бы решить эту проблему?
источник

A

Aleksandr in Ассемблер
Мьютексом и делается
источник

A

Aleksandr in Ассемблер
В начале функции WaitForSingleObject, в любом из выходов ReleaseMutex
источник

D

Den in Ассемблер
может lock перед пушем поставить?
источник

A

Aleksandr in Ассемблер
это не даст сделать одновременный пуш, а остальные инструкции - сколько угодно
источник

A

Aleksandr in Ассемблер
к тому же, я не помню чтобы push мог быть lock
источник

D

Den in Ассемблер
короче говоря напрашивается залочить стэк как то
источник