Адрес памяти никогда не находится в 8-битном регистре, но вот пример использования SIB:
add byte [rax + rdx], 1
Это экземпляр add rm8, imm8
, 80 /0 ib
. /0
указывает, что поле r в байте ModR / M равно нулю. Здесь мы должны использовать SIB, но нам не нужно немедленное смещение, поэтому мы можем использовать 00b для мода и 100b для rm, чтобы сформировать 04h для байта ModR / M (44h и 84h также работают, но тратят пространство на кодирование нулевое смещение). Теперь, глядя в таблицу SIB, есть два регистра, оба с «масштабом 1», поэтому база и индекс в основном взаимозаменяемы (rsp
не может быть индексом, но мы не используем его здесь). Таким образом, байт SIB может быть 10h или 02h.
Теперь просто поставим байты в ряд:
80 04 10 01
; or
80 04 02 01
Также, когда я использую байт ModR / M 0x05, это (*) относительно текущего указателя инструкции? В 64-битном режиме это 32 или 64 бита?
да. Вы видели записку, я уверен. Так что это может быть и то, и другое, в зависимости от того, использовали ли вы переопределение размера адреса или нет. В любом разумном случае это будет rip + sdword
. Использование другой формы дает усеченный результат, я не могу сразу представить себе какие-либо обстоятельства, при которых это имеет смысл (конечно, для общей математики, но не для указателей). Вероятно (хотя это предположение) существует возможность только для того, чтобы переопределение размера адреса работало достаточно равномерно.
Всегда ли SIB используется с адресом отправителя или получателя?
Зависит от того, что вы имеете в виду. Конечно, если у вас есть SIB, он будет кодировать источник или место назначения (потому что что еще там есть?) (Вы можете возразить, что SIB, который может появиться в nop rm
, не кодирует ничего, потому что nop
не имеет ни источников, ни направления). Если вы имеете в виду «который кодирует», это может быть любой из них. Просматривая все инструкции, он чаще всего может появиться в исходном операнде. Но очевидно, что во многих случаях он может кодировать пункт назначения - пример: см. Выше. Если вы имеете в виду "используется ли он всегда", ну нет, посмотрите ту таблицу, на которую вы смотрели.
person
harold
schedule
05.03.2015