В чем практическая разница между регистрами SI и DI?
-
18-09-2019 - |
Вопрос
Я не понимаю, в чем разница.
Решение
Когда вы используете такие инструкции, как movsb, si считается срегистр source, а di считается дрегистр назначения.Но они оба обычные регистры x86.
Другие советы
Моя сборка немного заржавела, но одна — индекс источника, другая — индекс назначения.Инструкция типа movsb
скопирует байт из ячейки памяти, на которую указывает SI
, и переместите его в ячейку памяти, на которую указывает DI
, а затем увеличить оба, поэтому, если вы хотите скопировать байт, хранящийся по адресу SI+1
к DI+1
, требуется только дополнительная инструкция movsb.
SI
означает исходный индекс.Индекс источника используется в качестве указателя на текущий символ, считываемый в строковой инструкции (LODS, MOVS или CMPS).Индекс источника также доступен в качестве смещения для добавления Bx или Bp при косвенной адресации.
пример:
MOV [Bx + SI] , Ax
Эта инструкция копирует содержимое Ax в ячейку памяти, адрес которой представляет собой сумму Bx и SI.
DI
обозначает индекс назначения, используемый как указатель на текущий записываемый или сравниваемый символ в строковой инструкции.
Он также доступен в виде смещения, как и SI.
как сказано выше, di означает индекс назначения, а si — индекс источника. Когда мы хотим переместить данные из памяти, мы используем si, например, mov ax,[si].и когда мы хотим переместить данные в память, мы используем di.например, mov [ди],ax
оба являются 16-битными регистрами и не могут быть разделены на 8-битные.