From 1e09eb6b967e8b34a66b2944a357f889fd25d9ae Mon Sep 17 00:00:00 2001 From: Miheev Egor Date: Thu, 19 Sep 2024 13:53:42 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D0=BE=D0=B4=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B3=D1=80=D0=B0=D1=84=D1=83=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=20rel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02-cpu-commnads/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/02-cpu-commnads/README.md b/02-cpu-commnads/README.md index 34906ea..701f547 100644 --- a/02-cpu-commnads/README.md +++ b/02-cpu-commnads/README.md @@ -36,7 +36,8 @@ *Обозначений в этой колонке кратно больше, но я буду стараться приводить их кратко. поскольку тут есть регистры на любой вкус и цвет, я буду ставить символ # когда на месте # может быть число от 16 до 64* -- `rel#` - относительный адрес. Обычно с ним связана адресация относительно rip, а вернее относительно по всей видимости следующего его положения. Тут надо смотреть визасемблированый код. Встречается эта красота когда мы адресуемся относительно меток в ассемблере. Под капотом же по словам талмудика это число засовывается в байты после опкода как знаковое число и прибавляется к содержимому rip. Пути ассемблера неисповедимы, поэтому я рад, что вручную считать где именно в памяти что лежит нам не надо +- `rel8` - адресация относитльно rip насколько я понимаю. Воспринимается как знаковое число длиной 8 бит, которое прибавится к содержимому rip +- `rel#` - адресация внутри одного сегмента кода (когда в ассемблере начинается `section .text` - это оно). Встречается обычно когда надо обратиться к меткам при прыжках туда и сюда, а оттого встретить можно в `j*` и `call`. Разбиратьсят точнее у меня к сожалению нет возможности - `r#` - бозначает регистр размером # битов (от 8-битных до 64-битных) - `m#` - обозначает ячейку памяти размером # бит. периодически можено даже встретить # равное 128, что используется только в SSE и SSE2 инструкциях - `r/m#` - показывает, что операнд или память (например `[r11 + rcx + 2]`), или регистр (например `rcx`). Если относиться как к памяти, то число `#` указывает не на то, как память адресуется, а сколько битов будет из памяти прочитано, А если как к регистру, то нужно выбирать регистр по размеру, иначе процессор будет жаловаться