Режимы адресации сборки - PullRequest
       48

Режимы адресации сборки

3 голосов
/ 03 сентября 2011

Может кто-нибудь объяснить, в чем разница между следующими двумя? Я нахожу это немного трудным для понимания концепций, стоящих за режимами адресации

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Разницы нет!

Вы можете проверить с помощью отладчика ...

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

Компилятор скомпилирует инструкции для стенда следующим образом: 8B443B0A

Итак, топор должен загрузить 16-битное значение с адреса: bx + di + 10

3 голосов
/ 03 сентября 2011

Вы пометили этот MASM32, но ни одна инструкция не подходит для x86. Если вы не занимаетесь 16-битным программированием, в этом случае вы должны это прояснить.

mov ax, [bx+di+10]

Недопустимо в x86, потому что оно использует 16-битную адресацию. Допускается, однако, следующее:

mov ax, [ebx+edi+10]

Что означает взять значение ebx, добавить его к значению edi и добавить 10 к этому значению. Затем обработайте окончательное значение как указатель. Возьмите word (2 байта), на который указывает этот адрес, и присвойте значение ax.

mov ax, [bx+di]+10

Аналогично не разрешено (16-битная адресация). Если вы должны были сделать:

mov ax, [ebx+edi]+10

Это также недопустимо, поскольку mov не разрешает дополнительный ввод после [ebx+edi]

0 голосов
/ 03 сентября 2011

Предположим, что bx = 10, di = 10.

В случае 1,

mov ax, [30]

Значение в ячейке памяти 30 будет скопировано в регистр AX

В случае 2

mov ax, [20]+10

Значение в ячейке памяти 20, скажем, X, добавьте к нему 10h X+10h, будет скопировано в регистр AX.

...