1

Ниже приведены значения регистров для Intel микропроцессора:Как вычислить физический адрес из этой инструкции по сборке?

CX: FF0A

BX: AB5D

DI: BDEF

DX: 1234

DS: CC20

SP: CD0F

Инструкция:

  1. ADD [BX + DI], CX

  2. MOV DX, [SP + 1652H]

Я хочу знать, как вычислить физический адрес вышеупомянутых двух инструкций.

+1

Это также зависит от 'ds' для первой инструкции. Вторая инструкция недействительна. – harold

+0

DS - CC20. теперь, пожалуйста, скажите мне, как рассчитать физические адреса? –

+0

хорошо, вы также должны указать значение регистра ds в вопросе. так что читатели не пропустите его. –

ответ

1

Для 1. ДОБАВИТЬ [BX + DI], CX Сначала вам необходимо будет рассчитать эффективный адрес.

Эффективная адресация = Base + Index + Смещение

Затем физическая адресация будет: Физическая адресация = сегментация * 0x10 + Эффективная адресация

В вашем случае база будет значение Ьх , index будет значением di, а смещение будет пустым. Теперь вычислите самостоятельно.

+0

есть. Благодарю. и 2-я инструкция неправильная? –

+0

@SaminaJabeen в режиме 16b x86 не может кодировать '[sp + imm16]' адресацию памяти в любой инструкции, поэтому технически это недействительно. В режиме 32b '[esp + imm32]' будет работать, поэтому автор вопроса, вероятно, смутился этим. В режиме 16b обычно используется '[bp + imm16]' (копирование 'sp' в' bp' в начале конкретной части кода), и это немного сложный вопрос, поскольку он не будет использовать 'ds' как сегментный регистр, но другой (как и режим esp в режиме 32b). – Ped7g