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

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

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]

14

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

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

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

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

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

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

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

LOOPD всегда ECX

LOOPW всегда CX

15

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

16

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

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

Редактор

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

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

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

Ассемблер

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

 

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

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

Компоновщик

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

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

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

Загрузчик

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

link32 AddSub.obj irvine32.lib kernel32.lib

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

Решения ОС

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

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

Результат

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

 

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

Учебная библиотека

ClrScr

ReadHex

CrLf

ReadInt

Delay

ReadString

DumpMem

SetTextColor

DumpRegs

WaitMsg

GetCommandTail

WriteBin

GetMseconds

WriteChar

GotoXY

WriteDec

Random32

WriteHex

RandomiZe

WriteInt

ReadChar

WriteString

19

Стек

Понятие стека

LIFO (Last-In, FIst-Out)

Стековая адресация памяти

SS ESP

«рост» в сторону меньших адресов

PUSH/POP r/m16|r/m32|imm32|imm16

PUSHFD/POPFD – флаги 32 бита

PUHSF/POPF - флаги 16 бит

PUSHAD/POPAD – регистры по 32 бита

EAX,ECX,EBX,ESP,EBP,ESI,EDI

PUHSA/POPA - регистры по 16 бит

AX, CX, BX, SP, BP, SI, DI

20

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