Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_Lektsii_2015.doc
Скачиваний:
105
Добавлен:
22.03.2016
Размер:
1.19 Mб
Скачать

Директива dd (define double word, определить двойное слово)

По директиве DD описываются переменные, под которые отводятся двойные слова. Директива похожа на две предыдущие.

Способы задания операндов:

  • Операнд ?

  • Целое число со значением от -231 до 232-1

  • Константное выражение (со значением от -215 до 216-1)

  • Адресное выражение (операнд задает абсолютный адрес)

  • Несколько операндов, конструкция повторения

Директивы эквивалентности и присваивания

Описывают константы.

Директива EQU (equal, равно) – директива эквивалентности.

Синтаксис:

<имя> EQU <операнд>

Операнд – имя

Пример: Если используется регистр АХ для вычисления суммы, то его можно обозначить SUM и далее использовать имя SUM:

SUM EQU AX

Операнд – константное выражение

N EQU 100

K EQU 2*N-1

X DB N DUP (?)

X DB 100 DUP (?)

Операнд – текст

S EQU ‘Ошибка’

Директива присваивания

<имя> = <константное выражение>

K=10

A DW K ; A DW 10

K=K+4

B DB K ; B DB 14

Структура программы. Логические сегменты

и их параметры

Логический сегмент – именованная область памяти, адресуемая с неизменным значением одного из сегментных регистров.

Программный сегмент имеет следующую структуру:

<имя сегмента> SEGMENT <параметры>

<предложение>

<предложение>

<имя сегмента> ENDS

Пример программного сегмента:

A SEGMENT

X DW ?

A ENDS

Директива ASSUME

ASSUME <пара> {, <пара>}

где <пара> - это <сегментный регистр>:<имя сегмента>

Пример:

ASSUME ES: A, DS: B, CS: C

Начальная загрузка сегментных регистров

Пусть требуется регистр DS установить на начало сегмента В.

MOV AX, B

MOV DS, AX

Аналогично загружается регистр ЕS.

Регистр CS загружать не надо.

Регистр SS, который должен указывать на начало стека, можно загрузить двумя способами: в самой программе (также как регистры DS и ЕS), либо загрузку поручить операционной системе. Для этого в директиве SEGMENT, открывающей описание сегмента стека, указывают специальный параметр SТACK.

Структура программы

STACK SEGMENT STACK ; сегмент стека

DB 128 DUP (?)

STACK ENDS

DATA SEGMENT ; сегмент данных

<описания переменных и т.п.>

DATA ENDS

CODE SEGMENT ; сегмент команд

ASSUME CS: CODE, DS: DATA, SS: STACK

START: MOV AX, DATA

MOV DS, AX ; загрузка DS

<остальные команды программы>

CODE ENDS

END START ; конец программы, точка входа

Побитовая обработка и ее основные виды

  1. Логические команды

Выполняют логические операции – отрицание, конъюнкцию и дизъюнкцию.

Отрицание: NOT op

Допустимые типы операнда: r8, m8, r16, m16.

MOV AL,1100b ; AL=00001100b

NOT AL ; AL=11110011b

Конъюнкция (логическое умножение): AND op1,op2

В этой команде допустимы следующие комбинации операндов:

op1 op2

r8 i8, r8, m8

m8 i8, r8

r16 i16, r16, m16

m16 i16, r16

x

y

x and y

1

1

1

1

0

0

0

1

0

0

0

0

MOV AL,1100b ; AL=00001100b

AND AL,1010b ; AL=00001000b

Проверка: TEST op1,op2

MOV BH,1100b

TEST BH,0011b ; =00000000->ZF=1

TEST BH,1010b ; =00001000->ZF=0

Дизъюнкция (логическое сложение): OR op1,op2

Допустимые типы операндов – как в команде AND.

x

y

x or y

1

1

1

1

0

1

0

1

1

0

0

0

MOV CL,1100b

OR CL,1010b ; CL=00001110b

Исключающее ИЛИ (eXclusive OR): XOR op1,op2

Допустимые типы операндов – как в команде AND.

x

y

x хor y

1

1

0

1

0

1

0

1

1

0

0

0

MOV CL,1100b

OR CL,1010b ; CL=00000110b

XOR АХ,АХ ; АХ:=0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]