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