MOV [EBX], AX - указатель на регистр? - PullRequest
1 голос
/ 15 ноября 2009

MOV [1234H], AX означает, что значение AX копируется в 1234 шестнадцатеричный адрес в памяти. Поэтому, пожалуйста, исправьте меня, если то, что я говорю, неверно, оператор [] работает как указатель, верно?

Как говорится, я не могу понять следующую инструкцию: MOV [EBX], AX зачем использовать []? EBX - это регистр общего назначения внутри процессора, а не ячейка памяти, поэтому на него нет указателя, верно?

P.S. Я программирую под masm32.

Спасибо

Ответы [ 5 ]

5 голосов
/ 15 ноября 2009

Регистр EBX здесь содержит значение, которое является адресом. MOV [EBX], AX означает, что: принять значение, сохраненное в регистре AX; запишите его по адресу, который хранится в EBX.

4 голосов
/ 15 ноября 2009

Значение [] больше означает «посмотреть на адрес ...», поэтому [1234H] означает посмотреть на адрес 0x1234, а [EBX] посмотреть на адрес, сохраненный в EBX. Как оператор * в C / C ++, если вы знакомы с этим.

4 голосов
/ 15 ноября 2009

Я полагаю, что в вашем вопросе EBX содержит адрес, а машина - магазин.

2 голосов
/ 15 ноября 2009

Будьте осторожны с такими инструкциями, как

MOV [EBX], AX

Поскольку AX является 16-разрядным регистром, он может понести значительные потери производительности, если адрес, который содержит EBX, не выровнен.

0 голосов
/ 16 ноября 2009

Скобки означают уровень косвенности.
mov bx, ax означает положить топор в bx или зарегистрировать напрямую, использовать регистр напрямую для хранения значения mov [bx], ax означает регистр косвенный, взять значение в регистре и использовать его в качестве адреса места для хранения значения. мов топор, 1234h означает немедленный, положить 1234h в AX mov [1234h], у ax такой же уровень косвенности, как и у [bx] выше, в скобках указан адрес места хранения результата.

Я не справляюсь с синтаксисом x86, но если в x86 это есть, вы увидите что-то вроде mov [bx + cx], ax, что означало бы добавить bx и cx и использовать его в качестве адреса для хранения значения в ax.

...