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

Архитектура ЭВМ и язык ассемблера

Пример

TITLE Сложение и вычитание (AddSub.asm) ; числа 32-разрядные

.386

.MODEL flat, sdtcall

.STACK 4096

ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO

.code

 

 

main

PROC

 

 

mov

eax,1000h

 

add

eax,4000h

 

sub

eax,2000h

 

call DumpRegs

 

INVOKE ExitProcess,0

main

ENDP

 

END

main

2

 

 

Директивы определения данных

• Структура

[имя] код инициализатор[,инициализаторы]

• Имя идентификатор

–символическое обозначение адреса данных

•Код

–Символическое обозначение варианта директивы

–BYTE, SBYTE, WORD, SWORD, DWORD, DSWORD

–FWORD, QWORD, TBYTE

–REAL4, REAL8, REAL10

•Инициализаторы

–Константное выражение, в т.ч. (символическая) константа,

–Повтор: DUP , неинициализатор: ?

•Порядок следования байтов – сначала младшие

3

Типы операндов (команд)

• r8, r16,r32 – 8-, 16-, 32-разрядный РОН

•reg – произвольный РОН

•sreg – 16-разрядный сегментный регистр

•imm8,imm16,imm32 – 8-, 16-, 32-разрядное значение, заданное непосредственно в команде

•r/m8,r/m16,r/m32 – 32-разрядный 8-, 16-, 32- разрядный операнд, кодирующий 8-, 16-, 32-

разрядный РОН или адрес 8-, 16-, 32-разрядного операнда в памяти

• mem- адрес 8-, 16-, 32-разрядного операнда в памяти

4

Пересылки простые и неочевидные

MOV получатель, источник

-Длина одинаковая

-Один операнд – обязательно регистр

-

Нельзя получать в CS, IP, EIP

-

Нельзя imm16 в sreg

MOVZX/MOVESX расширение (без)знаковое LAHF/SAHF опрос/установка младших флагов XCHG обмен данными

5

Директива ASSUME-специфицирует

‘сегментный регист’ как регистр, принимаемый по умолчанию для всех меток и переменных.

•assume CS:code,DS:data

•code segment ;Откроем сегмент команд

•begin:

•

mov

AX,data ;Настроим DS

•

mov

DS,AX ;на сегмент данных;

•

mov

DX,offset string ;Адрес выводимой строки

•

mov

ah,09h

•

int

21h ;Вызов DOS

•

mov

AX,4C00h ;Функция DOS завершения программы

•

int

21h ;Вызов DOS

•code ends ;Закроем сегмент команд

•data segment ;

• string

db

"The program works!$" ;

•data ends ;Закроем сегмент данных

•

stk segment stack ;Откроем сегмент стека

256 байт

•

db

256 dup (?) ;Отводим под стек

•stk ends ;Закроем сегмент стека

•end begin ;Конец

Построить листинг, запустить отладчик (debug , –t, -r, u)

•

Microsoft (R) Macro Assembler Version 4.00

3/4/13 17:48:31

•

 

 

 

 

 

•

 

 

 

 

Page 1-1

•

 

 

 

 

 

•

1

 

assume CS:code,DS:data

 

•

2 0000

 

code

segment ;Откроем сегмент команд

•

3 0000

B8 ---- R

begin:

mov

AX,data ;Настроим DS

•

4 0000

 

•

5 0003

8E D8

 

mov

DS,AX ;на сегмент данных;

•

6 0005

BA 0000 R

 

mov

DX,offset string ;Адрес выводимой

•строки

•

7

0008 B4 09

mov

ah,09h;обращение за воспроизведением строки

•

8

000A

CD 21

int

21h ;Вызов DOS

•

9

000C

B8 4C00

mov

AX,4C00h ;Функция DOS завершения

•программы

•

10 000F CD 21

int

21h ;Вызов DOS

•11

•

12 0011

code

ends ;Закроем сегмент команд

•13

•

14 0000

data

segment ;

db

"The program works!$" ;

•

15 0000

54 68 65 20 70 72 6F

string

•16 67 72 61 6D 20 77 6F

•17 72 6B 73 21 24

•

18 0013

data

ends ;Закроем сегмент данных

•19

•

20 0000

stk

segment stack ;Откроем сегмент сте

•ка

•

21 0000 0100[

db

256 dup (?) ;Отводим под стек 256

•байт

•

22

??

•

23

]

•24

•

25 0100

stk ends ;Закроем сегмент стека

•26

•

27

end begin ;Конец

3/4/13 17:48:31

•

Microsoft (R) Macro Assembler Version 4.00

•

 

 

 

•

 

 

Symbols-1

•

 

 

 

•Segments and Groups:

•

N a m e

 

Size

Align

Combine Class

•

CODE . . . . . . . . . . . . .

.

0011

PARA

NONE

•

DATA . . . . . . . . . . . . . .

0100

0013

PARA

NONE

•

STK . . . . . . . . . . . . . .

PARA

STACK

 

•Symbols:

•

N a m e

Type

Value

Attr

•

BEGIN . . . . . . . . . . . . .

L NEAR

0000

CODE

•

STRING . . . . . . . . . . . . .

L BYTE

0000

DATA

•22 Source Lines

• 22 Total Lines

•26 Symbols

•49888 Bytes symbol space free

•0 Warning Errors

•0 Severe Errors

Сложение и вычитание

• Команды

 

INC reg/mem

 

DEC reg/mem

 

NEG reg/mem

 

ADD получатель, источник

 

SUB получатель, источник

 

• Флаги

 

ZF- обнуление

 

CF- выход за границу разрядной сетки

 

OF- выход за границу дополнительного кода

 

SF- копия старшего (знакового) бита

8

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

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

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

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

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

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

9

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

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 на соответствующий адрес

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