From 995260cdde1e05cabb95a33c2fba6e99515e0668 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 20 Sep 2024 13:33:21 +0300 Subject: [PATCH] =?UTF-8?q?sync(README):=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB?= =?UTF-8?q?=20=D1=80=D0=B0=D1=81=D0=BF=D0=B8=D1=81=D1=8B=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BB=D0=B0=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02-cpu-commnads/README.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/02-cpu-commnads/README.md b/02-cpu-commnads/README.md index 701f547..c24df14 100644 --- a/02-cpu-commnads/README.md +++ b/02-cpu-commnads/README.md @@ -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". Она использует использует классическую операцию обращения к памяти, но саму память не затрагивает, а просто записывает высчитанный адрес в переменную +