s54820
Ну как всегда у интела. То же самое, только короче. Пояснения про префикс уже нет, про sreg как destination уже не пишут, а вот про старшие биты пока ещё помнят.
Eugene
Ну уже хорошо, что это хоть есть.
vi'talij
movzx r32,r16 забьіли
Anonymous
movzx r32,r16 забьіли
Это и так понятно это специальная инструкция
­
https://youtu.be/xQU_uZ3JYWM
Anonymous
чушь
Anonymous
почему gdt первый дескриптор должен быть пустым
Anonymous
?
Anonymous
зачем разработчики intel так сделали
Ask
мы не разработчики интел
Anonymous
ну а догадки
Anonymous
не принимать это же на веру
Ask
верить или нет тебе решать
Anonymous
можно ли как то в idt добавить видео сервис прошивки
Anonymous
int 0x10
Anonymous
а вот нашел
Anonymous
https://stackoverflow.com/questions/26448480/bios-interrupts-in-protected-mode
R
фасм это круто
R
учусь фасму, оказывается не особо сложнее си. Можно всю стандартную либу из msvcrt дергать
­
А можно и не дёргать.
R
А можно и не дёргать.
типа через винапи чисто работать?
Eugene
Dmitrij
фасм это круто
а какую роль играют скобки <> в параметрах для invoke/cinvoke ?
Anonymous
вопрос такой при возрасте из pm в rm зачем в idt загружать адрес ivt и смещение
Anonymous
ведь это же не дескрипторная таблица а просто таблица с адресами
R
а какую роль играют скобки <> в параметрах для invoke/cinvoke ?
скобки нужны чтобы можно было добавлять например спецсимволы типа \r и \n. Их приходится писать как 13,10
Eugene
а какую роль играют скобки <> в параметрах для invoke/cinvoke ?
Всё, что в скобках интерпретируется как один параметр. Т.е. если написать: cinvoke printf, 'Hello %s', 13, ebx это будет расценено как 3 параметра, а: cinvoke printf, <'Hello %s',13>, ebx как 2 параметра
Dmitrij
ок, спс !
Eugene
Это механизм макродвижка.
Eugene
вопрос такой при возрасте из pm в rm зачем в idt загружать адрес ivt и смещение
Ты не поверишь, но изменяя адрес IDT в RM можно сместить адрес таблицы векторов прерываний с 0-го физического адреса на любой другой :)
Eugene
Можешь считать, что в RM IDT состоит из dword'ов в формате сегмент:смещение.
Anonymous
я этого не знал
Anonymous
вот такая книга есть)
Anonymous
#book
Anonymous
спасибо огромное за книгу)
Anonymous
хорошая книженка)
vi'talij
деление вьічитанием
­
И? В чём баттхёрт?
vi'talij
hacker's delight, chapter 10, integer division by constants
R
привет асемблерщики, может кто нибудь пояснить почему чтобы выровнять стек на 16 байт в начале функции делают sub esp, 8 ? Почему именно 8 вычитают, типа изначально выровнено все на 8??
Leon
Это для установки указателя стека туда где лежат параметры иди чтото в этом роде
R
везде коментят этот sub для выравнивания
R
но почему минус 8 ?
R
а не 7 например
Ask
а что в esp кладется?стек вернее
R
а что в esp кладется?стек вернее
ничего не кладется в самом начале программы
R
чему равен esp в точке входа?
R
почнму первая инструкция в точке входа sub esp, 8 ?
Ask
прям самая 1? это где такое
R
ну третья
R
вот
Ask
так, а для чего функции используют стек?
usernameak
так, а для чего функции используют стек?
А где ты будешь хранить локальные переменные
R
утверджается что после вычитания 8 из начального значения esp он станет кратным 16ти. Почему так??
R
Потому что 8 там уже есть?
ну да, а почему в энтрипоинте всегда есп кратно 8 ?
R
это вснгда так?
Ask
нет
usernameak
ну да, а почему в энтрипоинте всегда есп кратно 8 ?
Потому что адрес возврата, а изначальное состояние выравнено на 16
R
Потому что адрес возврата, а изначальное состояние выравнено на 16
Ааа типа потому что запушили адрес возврата и ebp ??? И это заняло 8 байт типа
usernameak
а, в энтрипоинте?
usernameak
Который _start или который main?
R
ebp никто не пушил
после пролога
usernameak
Который _start или который main?
Тогда ответь на это
usernameak
Если прям в самом-самом энтрипоинте, то там нет адреса возврата на большинстве платформ
Dmitrij
походу это под переменные argc и argv ...
usernameak
походу это под переменные argc и argv ...
Они как раз занимают с выравниванием 16 байт
usernameak
Поэтому на него не влияют
Dmitrij
ну да, сначала под них резервируется место, а потом стек выравнивается...
Dmitrij
хотя гоню...
usernameak
На стеке минимальное выравнивание на x86/арме/ещё чем - sizeof(void*)
usernameak
Однако calling convention'ы почему то требуют 16 байт на фрейм
Dmitrij
короче: так решил компилятор, и тут ничего не поделаешь ))
Eugene
утверджается что после вычитания 8 из начального значения esp он станет кратным 16ти. Почему так??
Это в 64-х битах перед вызовом функции стак выравнивается по 16 байтам. Поэтому 8 байт на адрес возврата, остается ещё 8 (либо push rbp, либо sub rsp,8) — вот тебе и снова выравнивание по 16 байта. В 32-х битах такого нет. Это либо под локальные переменные, либо х/з что за прикол.