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

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

Пример

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

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