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`). Если относиться как к памяти, то число `#` указывает не на то, как память адресуется, а сколько битов будет из памяти прочитано, А если как к регистру, то нужно выбирать регистр по размеру, иначе процессор будет жаловаться