sync(README): начал расписывать решение для лабы
This commit is contained in:
@ -74,11 +74,29 @@
|
|||||||
|
|
||||||
NOTE: По какой-то причине это не указано в руководстве Intel, но по крайней мере если верить сайту, который я использовал для ассемблирования инструкций, то нужно обязательно учитыать префиксы к опкоду прежде чем начинать кодировать (опять же все по опыту):
|
NOTE: По какой-то причине это не указано в руководстве Intel, но по крайней мере если верить сайту, который я использовал для ассемблирования инструкций, то нужно обязательно учитыать префиксы к опкоду прежде чем начинать кодировать (опять же все по опыту):
|
||||||
|
|
||||||
1. `0x67` - ставится если команда **адресуется** при помощи 32-битных регистров
|
1. `0x66` - ставится, если программа иссользует хотя бы 1 16-битный регистр
|
||||||
2. `0x66` - ставится, если программа иссользует хотя бы 1 16-битный регистр
|
2. `0x67` - ставится если команда **адресуется** при помощи 32-битных регистров
|
||||||
|
|
||||||
Благо для 8-битных операций другие опкоды и хотя бы на них не надо префиксы запоминать)
|
Благо для 8-битных операций другие опкоды и хотя бы на них не надо префиксы запоминать)
|
||||||
|
|
||||||
|
## Примеры переводов
|
||||||
|
|
||||||
|
<!---потом тут появятся адекватные примеры-->
|
||||||
|
|
||||||
|
## Решение остальных пунктов
|
||||||
|
|
||||||
|
*В целом в этом репозитории лежат файлы, в которых я приложил пока еще не протестированное, но решение для первых нескольких пунктов. Однако в силу того, что память у нас 64-битная, а также я не могу залеть напрямую в видеопамять если не буду собирать модуль ядра. Возможно конечно от нечего делать я сделаю модуль ядра, который позволит выворачивать такие приколы, но это будет точно не на время этого курса.*
|
||||||
|
|
||||||
|
### 01 - простучать команды ассемблеру
|
||||||
|
|
||||||
|
Тут нечего сказать - есть просто колонка с коммандами и просят их использовать. Тут гугл в помощь.
|
||||||
|
|
||||||
|
А вот по поводу полей в команде могу сразу сказать - в 64 битном процессоре все это будет выглядеть немного иначе. Поэтому предлагаю 16-битные регистры заменить в команде на 64 битные и закодировать как для 64 разрядной системы. подробная инструкция как это бы надо бы сделать у меня приведена выше, поэтому тут не буду на этом останаваливаться.
|
||||||
|
|
||||||
|
### 02 - Пересылка массива при помощи loop и lea
|
||||||
|
|
||||||
|
`lea` - это сокращение от "load effective adress". Она использует использует классическую операцию обращения к памяти, но саму память не затрагивает, а просто записывает высчитанный адрес в переменную
|
||||||
|
|
||||||
<!--- Пока что я думаю эта инфа лишняя, может потом верну и раскомментирую
|
<!--- Пока что я думаю эта инфа лишняя, может потом верну и раскомментирую
|
||||||
### Чутка про префикс REX
|
### Чутка про префикс REX
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user