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

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

Пример

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

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