русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Бита, то есть двойное слово.


Дата добавления: 2013-12-23; просмотров: 608; Нарушение авторских прав


Бит, то есть слово;

Бит, то есть байт;

Цепочечные команды или команды обработки строк символов

Лекция №9. Структуры. Записи. Объединения. Работа с файлами.

Адресное_выражение.имя_поля_структуры

Методы работы со структурой

Для того чтобы сослаться в команде на поле некоторой структуры, используется специальный оператор — символ «.» Он используется в следующей синтаксической конструкции:

 

 

Здесь:

адресное_выражение — идентификатор переменной некоторого структурного типа или некое выражение (рис. 1);

имя_поля_структуры — имя поля из шаблона структуры. Это смещение поля от начала структуры.

Таким образом оператор. вычисляет выражение:

(адресное_выражение) + (имя_поля_структуры)

 

Рис. 1. Синтаксис адресного выражения в операторе обращения к полю структуры.

 

К примеру, требуется извлечь в ax значения поля с возрастом. Из-за принципа хранения данных «старший байт по младшему адресу» старшая цифра возраста будет помещена в аl, а младшая — в ah. Для корректировки достаточно использовать команду xchg al,ah:

 

mov ax,word ptr sotr1.age ;в ах возраст sotr1

xchg ah,al

 

;a можно и так:

lea bx,sotrl

mov ax,word ptr [bx].age

xchg ah,al

 


Определим массив из 10 структур типа worker:

mas_sotr worker 10 dup (<>)

 

Размер в байтах, занимаемый полями структуры можно получить с помощью оператора type. После того, как стал известен размер экземпляра структуры, организовать индексацию в массиве структур можно следующим образом. К примеру:

 

worker struc

...

worker ends

...

mas_sotr worker 10 dup (<>)

...

mov bx,type worker ;bx=77



lea di,mas_sotr

;извлечь и вывести на экран возраст всех сотрудников:

mov сх,10

cycl:

mov dl,[di].age

add di,bx ;к следующей структуре в массиве mas_sort

loop cycl

 


Пример: Выполним копирование поля nam третьего сотрудника в поле nam пятого сотрудника:

 

worker struc

...

worker ends

 

mas_sotr worker 10 dup (<>)

...

mov ebx,offset mas_sotr

mov esi,(type worker)*2 ;si=77*2

add esi,ebx

mov edi,(type worker)*4 ;di=77*4

add edi,ebx

mov cx,30

rep movsb [edi].nam,[esi].nam

 


Цепочечные команды позволяют проводить действия над блоками памяти, представляющими собой последовательности элементов следующего размера:

Особенность всех цепочечных команд в том, что они, кроме обработки текущего элемента цепочки, осуществляют ещё и автоматическое продвижение к следующему элементу данной цепочки.

В системе команд микропроцессора имеются семь операций примитивов обработки цепочек:

1) пересылка цепочки:

– movs адрес приёмника, адрес_источника

– movsb

– movsw

– movsd

2) сравнение цепочек:

– cmps адрес_приёмника, адрес_источника

– cmpsb

– cmpsw

– cmpsd

3) сканирование цепочки:

– scas адрес_приёмника

– scasb

– scasw

– scasd

4) загрузка элемента из цепочки:

– lods адрес_источника

– lodsb

– lodsw

– lodsd


5) сохранение элемента в цепочке:

– stos адрес_приёмника

– stosb

– stows

– stosd

6) получение єлементов цепочки из порта ввода-вывода:

– ins адрес_приёмника, номер_порта

– insb

– insw

– insd

7) вывод элементов цепочки в порт ввода-вывода:

– outs номер_порта, адрес_источника

– outsbs

– outws

– outds

Направление продвижения в цепочке определяется значением флага направления df в регистре eflags/flags.

– если df=0, то значения индексных регистров esi/si и edi/di будут автоматически увеличиваться (операция инкремента) цепочечными командами, то есть обработка будет осуществляться в направлении возрастания адресов;

если df=1, то значения индексных регистров esi/si и edi/di будут автоматически уменьшаться (операция декремента) цепочечными командами, то есть обработка будет идти в направлении убывания адресов.

Состоянием флага df можно управлять с помощью двух команд, не имеющих операндов:

– cld – очистить флаг направления. Команда сбрасывает флаг направления df в 0.

– std – установить флаг направления. Команда устанавливает флаг направления df в 1.


Цепочечные команды часто используются совместно с префиксами повторения:

– rep;

repe или repz;

repne или repnz.

Данные префиксы могут анализировать состояние регистра ecx/cx или флаг нуля zf.

 

1) Префикс rep заставляет цепочечные команды выполняться, пока содержимое в есх/сх не станет равным 0. При этом цепочечная команда, перед которой стоит префикс, автоматически уменьшает содержимое есх/сх на единицу.

 

2) Префиксы repe или repz заставляют цепочечную команду выполняться до тех пор, пока содержимое есх/сх равно 0 или флаг zf равен 1. Как только одно из этих условий нарушается, управление передаётся следующей команде программы.

 

3) Префиксы repne или repnz заставляют цепочечную команду циклически выполняться пока содержимое есх/сх не равно 0 или флаг zf равен 0. При невыполнении одного из этих условий работа команды прекращается.

______________________________________________________

Самостоятельно на практике:

Создать массив структур mas_sotr2 worker 7 dup (<>). Инициализировать массив структур в программе. На экран выдать сообщение в окне MessageBoxA. Сообщение должно содержать все данные структуры для самого старшего сотрудника.

 




<== предыдущая лекция | следующая лекция ==>
Определение данных с типом структуры | Работа с записями


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.