Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации / 2-assembler-5.3.13.ppt
Скачиваний:
40
Добавлен:
11.04.2015
Размер:
366 Кб
Скачать
☆

Работа с данными и адресами: операторы и директивы

•OFFSET – вычислить смещение от начала сегмента в адресном выражении

•ALIGN – установить начало очередных данных на границу указанного размера

•PTR – установить размер указываемых данных

•TYPE, LENGTHOF, SIZEOF – вычислить размер данных

•LABEL – задать имя и тип адреса, без выделения памяти,

11

Адресация в Ассемблере

1. Регистровая адресация - операнды располагаются в любых регистрах общего назначения или сегментных регистрах

mov bx, ax

mov es, ax

2. Непосредственная адресация mov ax, 2

add ax, 2

3. Прямая адресация - если известен адрес операнда располагающегося в памяти

mov ax,es:0001 mov ax, es:word_var

В последнем случае ассемблер сам заменит слово word_var на соответствующий адрес

Адресация в Ассемблере

4. Косвенная адресация - адрес операнда в памяти можно не указывать непосредственно, а хранить в любом регистре

mov ax, [bx]

5. Адресация по базе со сдвигом - комбинация двух предыдущих методов адресации

mov ax, [bx+2] mov ax, [bp]+2

Адресация в Ассемблере

6. Косвенная адресация с масштабированием

mov ax,[esi*2]+2 - этот метод адресации полностью идентичен предыдущему, за исключением того, что с его помощью можно прочитать элемент массива слов, двойных слов или учетверенных слов, просто поместив номер элемента в регистр множитель, может быть равен 1, 2, 4 или 8 - соответствует

размеру элемента массива — байту, слову, двойному слову, учетверенному слову соответственно

Адресация в Ассемблере

7.Адресация по базе с индексированием - в этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано Все следующие команды — это разные формы записи одного и того же действия:

mov ax,[bx+si+2] mov ax,[bx][si]+2 mov ax,[bx+2][si] mov ax,[bx][si+2] mov ax,2[bx][si]

8.Адресация по базе с индексированием и масштабированием - это самая полная возможная схема адресации, в которую входят все случаи, рассмотренные ранее, как частные

mov eax, ds:[eax+ebx*2+2]

Адресация

• Прямая (адрес задан непосредственно)

MOV al,var1

MOV al,[var1]

MOV al,[arrayB+1] MOV al,[arrayD+4]

• Косвенная

MOV al,[esi]

INC BYTE PTR [esi]

16

Безусловный переход и цикл

JMP метка_перехода

– безусловный переход

LOOP метка_перехода

–ECX/CX уменьшается на единицу

–если ECX/CX не ноль, то переход по метке

–иначе следующая команда

LOOPD всегда ECX

LOOPW всегда CX

17

TITLE Add and Subtract, Version 2 (AddSub2.asm)

;Сложение и вычитание 32-битных целых переменных

;результат – в переменной.

INCLUDE Irvine32.inc

.data

 

 

 

val1

dword

10000h

Ещё пример

val2

dword

40000h

 

val3

dword

20000h

 

finalVal dword

?

 

.code main PROC

mov eax,val1

;

Загрузить 10000h

add eax,val2

;

добавить

40000h

sub

eax,val3

;

вычесть 20000h

mov

finalVal,eax

;

записать

результат (30000h)

call DumpRegs

;

отобразить регистры

exit

 

main ENDP

 

END main

18

Способы адресации Построить сегменты и создать exe файлы

Процесс создания программы

• Редактор

Ввод предписаний

Ваш исходный текст

Изменения текста

• Ассемблер

Предписания трансляции

 

Текстовые библиотеки

Объектный код

• Компоновщик

Предписания компоновки

Загрузочный код

Статический код

• Загрузчик

Предписания загрузки

link32 AddSub.obj irvine32.lib kernel32.lib

Исполняемый код

Решения ОС

• ОС+аппаратура

Предписания исполнения

Результат

Внешние события

 

Внешние данные и код 20

Соседние файлы в папке Презентации