Vladimir
ни одна нормальная операционка не работает с диском через биос
Anonymous
Через контроллер внешних прерываний?
Vladimir
при чём тут прерывания?
Anonymous
Через порты ввода вывода
Vladimir
да
Vladimir
ну и через DMA
Vladimir
PCI
Anonymous
in/out которые
Anonymous
Пины
Anonymous
Да
Vladimir
современное железо часто замапливается в обычное пространство памяти, нежели в пространство портов
Vladimir
порты - это выдумка Intel ) ARM, MIPS и т.д используют исключительно MMIO
Yura
современное железо часто замапливается в обычное пространство памяти, нежели в пространство портов
это как? в плане как к этому обращаться - так же как к оперативке типа по адресам итп??
Vladimir
а как к Local APIC обращаешься?
Vladimir
по сути то же MMIO-устройство, только встроенное в проц
Yura
а как к Local APIC обращаешься?
я честно говоря только в реальном режиме писал на лабах... Асм мне очень понравился, асм вставки иногда в с++ делаю. где кстати удобнее всего в винде ассемблерить?
Vladimir
Т.е. через озу работать с переферией
не через ОЗУ, а через адресное пространство памяти.
Anonymous
Кароче. Через биос все сильно проще
Anonymous
Капитально проще
Vladimir
Капитально проще
тут всё в производительность упирается. BIOS не предназначена для высокопроизводительного ввода/вывода. Весь ввод/вывод - синхронный, нереентерабельна и т.п.
Anonymous
А если не через биос - прощайте стандарты
Anonymous
Как работать с тем же видеобуфером, переключать режимы - хз
Vladimir
стандарт BIOS фактически похоронили ещё с приходом Windows.
Anonymous
Но идея то была отличная
Биос и прерывания это как хело ворлд. Кое что можно сделать но все это дичайше устарело
Vladimir
Есть там зачатки асинхронности (int 15h), но развития оно не получило.
Чтобы делать актуальные вещи на пустом месте, придётся прочитать кучу книг...
Anonymous
Биос и прерывания это как хело ворлд. Кое что можно сделать но все это дичайше устарело
Все говорят, что устарело, а как его обойти - сломай себе мозг
Anonymous
С каждым устройством свои приколы походу
Все говорят, что устарело, а как его обойти - сломай себе мозг
Почитай Зубкова для начала, там есть про защищённый
Вроде ин аут тоже есть, насчёт мимо не помню
Vladimir
Но идея то была отличная
Много отличных идей запороли маркетологи )
Можно почитать коды ядра Линукс 0.01
Vladimir
Которым надо здесь и сейчас с максимальными попугаями и с минимальными трудозатратами на разработку
Там есть загрузчик boot.s сразу с переходом на защищённый
Agent
Можно научиться читать ассемблер и понимать? Голова не взорвётся?
oles
можно даже научиться читать опкоды и понимать
oles
зависит от желания
Anonymous
я с пекарней общаюсь по губам
Aiwan \ (•◡•) / _bot
format PE64 console 5.0 include 'win64wx.inc' .code start: fastcall testarg,1,2,3,4 invoke ExitProcess,0 ;--------------------------------- proc testarg v1,v2,v3,v4 mov [rbp+0x10],rcx ;сохраняем в теневую часть стека mov [rbp+0x18],rdx mov [rbp+0x20],r8 mov [rbp+0x28],r9 xor rcx,rcx ;что-то делаем с регистрами xor rdx,rdx xor r8,r8 xor r9,r9 mov rax,[rbp+0x10] ;используем переданные параметры add rax,[rbp+0x18] add rax,[rbp+0x20] add rax,[rbp+0x28] ret endp .end start можно ли как нибудь обращаться к параметрам которые сохранены в теневой части по метке типа v1,...,v4. а то через [rbp+0x10] не совсем наглядно и понятно?
Aiwan \ (•◡•) / _bot
((
Anonymous
Я нуб, сам знаешь
Anonymous
Но, держу кулаки
Aiwan \ (•◡•) / _bot
...или тогда fastcall теряет преимущество перед stdcall?
Aiwan \ (•◡•) / _bot
кажись уже туплю, видимо не правильно писал когда так пробовал
Ask
только вроде при фасткале засейвить надо сначала параметры
Aiwan \ (•◡•) / _bot
;сохраняем в теневую часть стека
Ask
а ну да ) mov [v1],rcx ...
Aiwan \ (•◡•) / _bot
значит по скорости наверное лучше всетаки использовать stdcall если приходится сохранять в фасте параметры в стек
Aiwan \ (•◡•) / _bot
v1,...,v4
Aiwan \ (•◡•) / _bot
proc testarg v1,v2,v3,v4 mov [v1],rcx ;сохраняем в теневую часть стека mov [v2],rdx mov [v3],r8 mov [v4],r9 xor rcx,rcx ;что-то делаем с регистрами xor rdx,rdx xor r8,r8 xor r9,r9 mov rax,[v1] ;используем переданные параметры add rax,[v2] add rax,[v3] add rax,[v4] ret endp
Aiwan \ (•◡•) / _bot
преписал вот так
Viktor
Какое-то странное у MS соглашение о вызовах
Ask
это фасткал, ну от борланда да отличается )
Viktor
Зачем сохранять аргументы в shadow space?
Ask
чтоб регистры юзать
Viktor
это фасткал, ну от борланда да отличается )
На 64 битах они все одинаковые, не?
Viktor
это фасткал, ну от борланда да отличается )
Я не на борланд ориентируюсь, а на SystemV
Viktor
Хм, из Вики: For example, a function taking 5 integer arguments will take the first to fourth in registers, and the fifth will be pushed on the top of the shadow space. So when the called function is entered, the stack will be composed of (in ascending order) the return address, followed by the shadow space (32 bytes) followed by the fifth parameter. Там не наоборот? (shadow space, return address, 5th arg)
Aiwan \ (•◡•) / _bot
На 64 битах они все одинаковые, не?
я так понимаю для винды точно так, эт чтоб вызов системных и своих функций были по одному соглашению, а не плодить cdecl, stdcall, pascal
Viktor
А, бля, ascending order
Viktor
Теперь понял
Viktor
Все у вас на Винде не как у людей
електр🟢нік ✙🟠рчбеч ඞ
Ask
нормально все на венде)
Aiwan \ (•◡•) / _bot
4 параметра
Aiwan \ (•◡•) / _bot
5 параметров
Aiwan \ (•◡•) / _bot
и стек вот такой после копирования 4х параметров в теневую часть
Viktor
Так, а нахуй оно нужно-то, кроме как для дебаггинга?
Aiwan \ (•◡•) / _bot
что именно?
Viktor
Сохранять параметры из регистров в теневую зону
Ask
чтоб регистры по своему юзать не ?
Aiwan \ (•◡•) / _bot
я в своей функции вызывал системные функции, а она мне там что то портила, поэтому надо было сохранить изначальные параметры туда где они и должны лежать