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