мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
asm:memory [06/03/2012 20:40]
arabusov
asm:memory [06/02/2013 14:44] (текущий)
arabusov
Строка 1: Строка 1:
 ===== Адресация переменных ===== ===== Адресация переменных =====
  
-В общем случае адрес переменной или команды можно представить с помощью выражения вида <code>База + Индекс + Смещение</code>где база - регистры BX или BP, индекс - регистры SI или DI. Эти регистры так и называются: базовые и индексные. Смещение - это постоянное выражение.+В общем случае адрес переменной или команды можно представить с помощью выражения вида <code>База + Индекс + Смещение</code>где база - регистры RBX или RBP, индекс - регистры RSI или RDI. Эти регистры так и называются: базовые и индексные. Смещение - это постоянное выражение.
  
 Пример: Пример:
Строка 10: Строка 10:
  
 greet db 'Hello' greet db 'Hello'
- 
-_DATA ends 
 </code> </code>
 и инициализируем ds указанием на сегмент данных и инициализируем ds указанием на сегмент данных
-<code asm>section .code+<code asm>section .text
  
 mov ax,_DATA mov ax,_DATA
Строка 33: Строка 31:
 mov al,[bx + si]</code> mov al,[bx + si]</code>
 В примерах со второго по пятый в al помещался 5-й символ массива greet, в первом в al помещался символ 'o', поэтому результат всех команд одинаковый. В примерах со второго по пятый в al помещался 5-й символ массива greet, в первом в al помещался символ 'o', поэтому результат всех команд одинаковый.
 +
 +===== Эффективные адреса NASM =====
 +Эффективный адрес — это любой операнд инструкции со ссылкой на память. Эффективные адреса в NASM имеют очень простой синтаксис: они содержат выражение (в результате вычислений которого получается нужный адрес), обрамленное квадратными скобками. Например: 
 +<code=asm>wordvar   dw 123 
 +     mov ax,[wordvar] 
 +     mov ax,[wordvar+1] 
 +     mov ax,[es:wordvar+bx]</code>
 +Любая другая ссылка, не соответствующая этой простой системе, для NASM недействительна, например es:wordvar[bx]. 
 +
 +Более сложные эффективные адреса, когда вовлечено более одного регистра, работают точно также: 
 +<code=asm>     mov eax,[ebx*2+ecx+offset] 
 +     mov ax,[bp+di+8]</code>
  
 ===== Стек ===== ===== Стек =====