SI
= Исходный индекс
DI
= Индекс назначения
Как указали другие, они имеют специальное использование с инструкциями строки. Для программирования в реальном режиме сегментный регистр ES
должен использоваться с DI
и DS
с SI
, как в
movsb es:di, ds:si
SI и DI также могут использоваться в качестве регистров индекса общего назначения. Например, исходный код C
srcp [srcidx++] = argv [j];
компилируется в
8B550C mov edx,[ebp+0C]
8B0C9A mov ecx,[edx+4*ebx]
894CBDAC mov [ebp+4*edi-54],ecx
47 inc edi
, где ebp+12
содержит argv
, ebx
равно j
, а edi
имеет srcidx
. Обратите внимание, что третья инструкция использует edi
, умноженное на 4, и добавляет ebp
смещение на 0x54 (расположение srcp
); квадратные скобки вокруг адреса обозначают косвенность.
Хотя я не могу вспомнить, где я это видел, но
это подтверждает большую часть этого, а
это (слайд 17) другие:
AX
= аккумулятор
DX
= аккумулятор двойных слов
CX
= счетчик
BX
= базовый регистр
Они выглядят как регистры общего назначения, но есть ряд инструкций, которые (неожиданно?) Используют один из них - но какой? - неявно.