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

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

Пример

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

Директива ORG

Директива ORG устанавливает счетчик адресов в соответствии со значением заданного ей ‘выражения’. Последующие адреса инструкций и данных начинаются с этого нового значения. Можно использовать символ счетчика ($).

 

 

 

ORG

120h

 

Mov

ax,dx; оператор mov начинается с

байта 120h в текущем сегменте

 

 

 

ORG

$+2

 

ARRAY

DW 100 DUP (0);

Переменная array декларируется с начальным адресом,на 2 байта превышающим текущий адрес

Директива EVEN

Директива EVEN выравнивает последующий байт данных или инструкции по границе некоторого слова. Если текущее значение счетчика адресов нечетно, то эта директива увеличивает значение счетчика адресов до четного и генерирует инструкцию NOP, если четно, то не делает ничего.

 

ORG

0

Test1

DB

1

 

 

EVEN

 

Test2

DW

513

 

EVEN указывает на необходимость увеличения счетчика и генерирует NOP(90h). Смещение равно 2, а не 1, если бы было EVEN

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

• Команды

 

INC reg/mem

 

DEC reg/mem

 

NEG reg/mem

 

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

 

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

 

• Флаги

 

ZF- обнуление

 

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

 

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

 

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

10

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