Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Байт SIB

Аноним
Кто-нибудь знает, что такое байт SIB в команде (байт, ставящийся после MODR/M при 32 адресации), и с чем его едят???
565
17 января 2002 года
PropellerMan
39 / / 20.06.2000
SIB- Scale Index Base используется ессно в PM и нужен для некоего хитрого (хотя все просто) преобразования операнда. Его размер либо 8 бит, либо его нету. Первые 2 бита - множитель (scale, ss). Например типа того
add eax,[ecx*8]
здесь ss=8=11b (1=00b,2=01b,4=10b,8=11b)
затем идут 3 байта поля index, которые означают на что мы будем домножать scale. В данном случае - это ecx. А база используется для прибавления, например
add eax,[ecx*8+ebx], где ebx - это база.

По исходной операции не сложно восстановить и сам байт sib. Надо только знать какие тройки бит соответствуют регистрам и просто построить исходный байт. (eax=000,ecx=001,edx=010,ebx=011...)
В последнем случае SIB=(11)(011)(001)
565
17 января 2002 года
PropellerMan
39 / / 20.06.2000
SIB- Scale Index Base используется ессно в PM и нужен для некоего хитрого (хотя все просто) преобразования операнда. Его размер либо 8 бит, либо его нету. Первые 2 бита - множитель (scale, ss). Например типа того
add eax,[ecx*8]
здесь ss=8=11b (1=00b,2=01b,4=10b,8=11b)
затем идут 3 байта поля index, которые означают на что мы будем домножать scale. В данном случае - это ecx. А база используется для прибавления, например
add eax,[ecx*8+ebx], где ebx - это база.

По исходной операции не сложно восстановить и сам байт sib. Надо только знать какие тройки бит соответствуют регистрам и просто построить исходный байт. (eax=000,ecx=001,edx=010,ebx=011...)
В последнем случае SIB=(11)(011)(001)
Аноним
Большое спасибо!
Принцип понял.
461
01 февраля 2002 года
gerard
102 / / 20.12.1999
Несколько дополнительных замечаний по поводу байта sib

1. Байт sib добавляется, если в основном постбайте поле r/m=100 (что соответствует регистру esp). Таким образом, например,
постбайт 00.001.100 обозначает не
"ecx, [esp]", а "ecx, (sib)".

2. Указатель стека не может быть также и индексом (index = 100 в байте sib). То есть,
например, sib = 11.011.100 обозначает не [ebx+8*esp], а просто [ebx].

3. Если в байте sib base = 101 (регистр ebp),
а в предыдущем байте mod = 00, то вместо ebp
используется 32-разрядное смещение. То есть
01.011.100 11.101.001 - ebx, d8[ebp+8*ecx]
10.011.100 11.101.001 - ebx, d32[ebp+8*ecx]
00.011.100 11.101.001 - ebx, d32[8*ecx], а не
ebx, [ebp+8*ecx].
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог