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

Сканирование строки: scasb, scasw

По команде SCASB содержимое регистра AL сравнивается с байтом памяти, абсолютный адрес которого указывает пара регистров ES:DI, после чего регистр DI автоматически устанавливается на соседний байт памяти.

AL=[ES:DI]? ; DI:=DI+1

Команда SCASW сравнивает слова – из регистра AX и ячейки памяти, абсолютный адрес которого определяется парой ES:DI, после чего регистр DI также автоматически устанавливается на соседнее слово памяти.

AX=[ES:DI]? ; DI:=DI+2

Команда SCAS используется для поиска в строке элемента, равного заданному (в AL или в AX), или отличного от заданного:

REPE SCASB – найти в строке первый элемент, отличный от AL.

REPNE SCASBнайти в строке первый элемент, равный AL.

Сохранение строки: STOSB, STOSW

По команде STOSB в байт памяти, абсолютный адрес которого задается парой регистров ES:DI, записывается содержимое регистра AL, после чего значение регистра DI автоматически меняется на +1. Команда STOSW записывает содержимое регистра AX в слово памяти, абсолютный адрес которого задается регистрами ES:DI, после чего меняет значение регистра DI на +2.

Перед командой STOS указывают только префикс REP.

Пример: заполнить пробелами строку S из 40 символов:

MOV AL,’ ‘

CLD

PUSH DS

POP ES

LEA DI, S

MOV CX, 40

REP STOSB

Загрузка строки: LODSB, LODSW

Команда LODSB (LODSW) записывает в регистр AL (AX) содержимое байта (слова) памяти, абсолютный адрес которого задается регистрами DS:SI, после чего меняет значение регистра SI аналогичным образом.

Пример: переписать все числа из X в Y с изменением их знака.

CLD

LEA SI, X

PUSH DS

POP ES

LEA DI, Y

MOV CX, 100

L: LODSB

NEG AL

STOSB

LOOP L

Приемы обработки структурированной информации

Структуры

По определению структура — это тип данных, состоящий из фиксированного числа элементов разного типа.

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

1. Описать тип структуры.

2. Определить переменные этого типа структуры.

3. Организовать обращение к элементам структуры.

Описание типа структуры

Структура – это составной объект, компоненты которого называются полями.

имя типа STRUC

описание поля

описание поля

имя типа ENDS

Пример:

DATE STRUC

Y DW 2013

M DB 4

D DB ?

DATE ENDS ; Тип структуры Дата из трех полей: год, месяц, день

Описание переменных-структур

Для описания используется следующая синтаксическая конструкция:

имя_переменной имя_структуры <[список значений]>

Пример:

DT1 DATE <?, 6, 9>

Доступ к элементам структуры

Для ссылок на поля структур используют конструкцию вида:

имя переменой.имя поля

Пример:

DT1.D

Если в переменной DT1 хранится дата 31 марта, требуется записать в нее дату следующего дня.

CMP DT1.M,3

JNE FIN

CMP DT1.D,31

JE APR1

JMP FIN

APR1: MOV DT1.M,4

MOV DT1.D,1

FIN: …

Записи

Запись — структурный тип данных, состоящий из фиксированного числа элементов длиной от одного до нескольких битов.

Описание типа записи

Описывается с помощью директивы следующего вида:

имя типа записи RECORD описание элементов

Пример:

REC RECORD A:3, B:3=7

DATE RECORD Y:7, M:4, D:5

Описание переменных-записей

Для описания такой переменной используют директиву следующего вида:

имя_переменной имя_типа <[список значений]>

D1 DATE <45,5,9>

Для работы с полями записей используются следующие средства языка ассемблера.

Оператор WIDTH

WIDTH имя поля записи

WIDTH имя записи или ее типа

WIDTH Y=7

WIDTH REC=6

Оператор MASK

MASK имя поля записи

MASK имя записи или ее типа

MASK REC =00111111b

MASK M =0000000111100000b

Данный оператор используется при выделении полей записей.

Пример:

Проверить содержит ли поле D записи D1 число 9

MOV AX, D1

AND AX, MASK D

CMP AX,9

JE YES

NO:

Пример:

Подсчитать количество студентов-отличников.

Описан структурный тип студент

STUD STRUC

FAM DB 20 DUP (?)

GR DW ?

MARKS DB 5 DUP (?)

STUD ENDS

Объявление массива переменных типа структура

S STUD 100 (<>)

MOV DX, 0 ; число отличников

; внешний цикл (по студентам)

MOV CX, 100 ; общее число студентов

MOV BX, 0 ; начало информации об очередном студенте

M1: MOV AX, CX

; внутренний цикл (по оценкам)

MOV CX, 5 ; число оценок

MOV SI, 0 ; индекс оценки

M2: CMP (S[BX]).MARKS[SI],5 ; оценка=5?

JNE NEXT ; нет - к следующему студенту

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