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

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

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

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