Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

STOSB ; A := AL, DI := DI+1. MOV SI, OFFSET A. Задание на лабораторную работу




STOSB                             ; A: = AL, DI: = DI+1

MOV AX, 0FFFFH

STOSW                            ; B: = AX, DI: = DI+2

    Префиксы повторения позволяют применить цепочечные команды сразу к целым последовательностям байт или слов. При этом размер последовательности указывается в регистре CX. Цепочечная команда с префиксом повторения выполняется CX раз и пока истинно условие выполнения команды для конкретного префикса повторения. После выполнения команды с префиксом повторения значение регистра CX уменьшается на 1. Другими словами, цепочечная команда с префиксом повторения выполняется пока значение регистра CX не равно 0 и пока истинно условие выполнения команды для конкретного префикса повторения. Некоторые префиксы не имеют условий выполнения команд, и цепочечные команды с этими префиксами выполняются ровно CX раз. Вообще, с префиксом повторения может быть выполнена любая команда процессора, но это, как правило, бывает нецелесообразно. В основном с префиксами повторения используются цепочечные команды. Однако использование команд LODSB и LODSW с префиксами повторения обычно также бывает нецелесообразно. Каждый префикс повторения, как и любая команда процессора, имеет свое мнемоническое обозначение. Синтаксис записи команды с префиксом повторения следующий:

< префикс_повторения> < команда> < операнды>

То есть команда записывается как обычно, но ей предшествует мнемоническое обозначение префикса повторения.

 

При использовании префикса повторения REP число раз, которое должна выполниться команда, указывается в регистре CX. Этот префикс не имеет условий выполнения команды, и команда выполняется ровно CX раз. Пример использования префикса повторения REP с цепочечной командой MOVSB (предполагается, что флаг DF сброшен):

A DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; описание переменных

B DB 10 DUP?

. . .

MOV DS, SEG A                      ; настройка DS: SI на A

MOV SI, OFFSET A

MOV ES, SEG B             ; настройка ES: DI на B

MOV DI, OFFSET B

MOV CX, 10

REP MOVSB                            ; пересылка 10 байт из A в B

    Префиксы REPE и REPZ идентичны. Команда с этими префиксами выполняется, пока значение регистра CX не равно 0 и пока значение флага нуля ZF равно 1. Эти префиксы можно использовать с цепочечными командами CMPS и SCAS (обобщенные мнемоники – без букв ‘B’ и ‘W’ в конце) для обнаружения первого несовпадающего значения двух последовательностей (команда CMPS) или для обнаружения первого несовпадающего значения элемента последовательности и регистра AL/AX (команда SCAS). Следует отметить, что префиксы REP, REPE и REPZ транслируются в один и тот же машинный код, но их действие различно для разных строковых команд – использование этих префиксов с командой MOVS даст выполнение команды ровно CX раз, а с командами CMPS и SCAS – в зависимости от входных данных.

Префиксы REPNE и REPNZ идентичны. Команда с этими префиксами выполняется, пока значение регистра CX не равно 0 и пока значение флага нуля ZF равно 0. Эти префиксы можно использовать с цепочечной командой SCAS для поиска определенного значения (которое определяется регистрами AL/AX) в последовательности байт или слов.

    Пример использования префикса повторения REPNZ с командой SCASB для отыскания заданного значения в последовательности байт (предполагается, что флаг DF сброшен):

A DB 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; описание переменных

. . .

MOV ES, SEG B             ; настройка ES: DI на A

MOV DI, OFFSET B

MOV CX, 10

MOV AL, 5

REP SCASB  ; поиск значения 5 в последовательности A

                      ; теперь значение DI установлено на сле-

; дующий байт после найденного значения

Задание на лабораторную работу

Диапазон целых чисел каждого элемента массива составляет от –32768 до 32767 (размер элемента – 2 байта). В программе должны использоваться цепочечные команды MOVSW, STOSW, CMPSW, SCASW (в зависимости от конкретного задания). Массивы A и B определить в тексте программы. Если по конкретному заданию требуется преобразовать не все элементы массива A, то в массив B записываются как преобразованные, так и не преобразованные элементы массива A.

1. Сложить элементы массива A с соответствующими элементами массива B и записать результат в массив B.

2. Вычесть элементы массива A из соответствующих элементов массива B и записать результат в массив B.

3. Умножить элементы массива A на соответствующие элементы массива B и записать результат в массив B.

4. Разделить элементы массива A на соответствующие элементы массива B и записать результат в массив B.

5. Прибавить к элементам массива A единицу и записать результат в массив B.

6. Вычесть из элементов массива A единицу и записать результат в массив B.

7. Прибавить к элементам массива A число 10 и записать результат в массив B.

8. Разделить элементы массива A на 2 и записать результат в массив B (использовать команду арифметического сдвига).

9. Умножить элементы массива A на 2 и записать результат в массив B (использовать команду арифметического сдвига).

10. Возвести элементы массива A в квадрат, и записать результат в массив B.

11. Обнулить нечетные элементы массива A и записать результат в массив B.

12. Обнулить четные элементы массива A и записать результат в массив B.

13. Обнулить все элементы массива A большие 10 и записать результат в массив B.

14. Обнулить все элементы массива A меньшие 20 и записать результат в массив B.

15. Выполнить с элементами массива A и соответствующими элементами массива B операцию логического «И» и записать результат в массив B.

16. Выполнить с элементами массива A и соответствующими элементами массива B операцию логического «ИЛИ» и записать результат в массив B.

17. Выполнить с элементами массива A и соответствующими элементами массива B логическую операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» и записать результат в массив B.

18. Выполнить с элементами массива A и соответствующими элементами массива B операцию логического «НЕ» и записать результат в массив B.

19. Изменить знак элементов массива A на противоположный и записать результат в массив B.

20. Вычислить модуль элементов массива A и записать результат в массив B.

                                   

 

Контрольные вопросы

1. Какие цепочечные команды существуют для МП 8086?

2. В чем особенность цепочечных команд?

3. Какими способами можно определить массив в программе на ассемблере?

4. Для чего служит директива SEG?

5. Для чего служит директива OFFSET?

6. В каких частях программы можно размещать данные?

7. Объясните выбор части программы, в которой размещаются данные для вашей программы?

8. В чем состоит отличие префиксов повторения REP и REPNE?

 

 

Лабораторная работа № 6

Структуры.

    Цель работы: изучить теоретические положения о структурах на языке Ассемблер, получить практические навыки программирования структур.

 

Структура – составной объект, занимающий несколько соседних ячеек памяти. Компоненты структуры называются полями, они могут быть разного типа (размера). Доступ к полям осуществляется по именам.

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

< имя типа> STRUC

               < имя поля>

                …………..

               < имя поля>

< имя типа> ENDC

Например: структура DATE с полями Y – год, M - месяц, D – день

DATE STRUC

      Y DW 2013

      M DB 2

      D DB?

DATE ENDS

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

Имена полей не должны совпадать с именами других объектов программы. Также в ассемблере не допускается вложенность структур.

В ассемблере имя поля структуры относится к простейшим константным выражениям и его значением является смещение данного поля относительно начала структуры. При выделении памяти под переменную данного типа ассемблер размещает ее поля в соседних ячейках памяти.

После описания типа структуры можно описывать переменные этого типа. Такие переменные называются структурами и описываются так: имя_переменной имя_типа < начальное значение>

В ассемблере одной директивой можно описать сразу несколько структур, т. е. можно описать массив, элементами которого являются структуры. Для этого в директиве указывается несколько операндов и/или конструкция повторения DUP

Например: DTS DATE < 2007, 12, 5>, 10 DUP (< > )

Здесь описывается массив из 11 структур типа DATE, причем поля первой из них будут иметь следующие начальные значения: 2007, 12 и 5, а остальные 10 структур получат одни и те же начальные значения, взятые по умолчанию: 2013, 2, ?. При этом имя DTS получит только первая структура, остальные остаются безымянными и доступ к ним осуществляется по адресным выражениям вида DTS+4, DTS+8 и т. д.

Чтобы сослаться на поле структуры используется конструкция: < имя переменной структуры>. < начальное поля>

Например: DTS. M

Такая конструкция обозначает ту ячейку памяти, которую занимает указанное поле данной структуры. Встречая эту конструкцию, ассемблер заменяет ее на адрес данной ячейки.

 

Задания на лабораторную работу

1. Дана структура STUD с полями: фамилия, номер группы, 5 оценок и массив S типа структуры, где собрана информация о 10 студентах. Записать в регистр DX количество студентов-отличников.

2. Дана структура Cars с полями: фирма-изготовитель, модель, объем двигателя, цена и массив S типа структуры, где собрана информация о 10 машинах. Записать в регистр DX количество машин с объемом двигателя 1. 4 см3.

3. Дана структура Music с полями: название песни, исполнитель, длительность, рейтинг в структуре и массив M типа структуры, где собрана информация о 15 песнях. Записать в регистр BX количество песен длительностью более 3 минут.

4. Дана структура STUD с полями: фамилия, номер группы, 5 оценок и массив S типа структуры, где собрана информация о 8 студентах. Записать в регистр DX количество студентов-отличников по математике, а в регистр BX – среднюю оценку пятого студента.

5. Дана структура Comp с полями: тип процессора, частота процессора, объем ОЗУ, объем жесткого диска, наличие встроенного модема и массив C       типа структуры, где собрана информация о 10 системных блоках. Записать в регистр DX количество системных блоков, ОЗУ которых более 512 Мб.

6. Дана структура Books с полями: фамилия автора, название книги, год издания, количество страниц, цена и массив B типа структуры, где собрана информация о 15 книгах. Записать в регистр DX количество книг, старше 2000 года.

7. Дана структура Books с полями: фамилия автора, название книги, год издания, количество страниц, цена и массив B типа структуры, где собрана информация о 15 книгах. Записать в регистр BX минимальную стоимость книги.

8. Дана структура Books с полями: фамилия автора, название книги, количество страниц, цена и массив B типа структуры, где собрана информация о 10 книгах. Записать в регистр DX количество книг с объемом более 200 страниц.

9. Дана структура Drink с полями: название напитка, основной ингредиент, наличие льда, объем напитка  и массив D типа структуры, где собрана информация о 7 напитках. Записать в регистр DX количество напитков, для приготовления которых необходим лед.

10. Дана структура Films с полями: название фильма, год выхода на экран, главный герой, кассовый сбор и массив F типа структуры, где собрана информация о 10 фильмах. Записать в регистр DX год выхода самого старого фильма.

 

 

Контрольные вопросы

    1. Как описать тип структуры?

    2. Что является смещением поля структуры?

    3. Допускается ли в ассемблере вложенность структур?

    4. Какая конструкция используется для ссылки на поле структуры?

    5. Описан тип структуры:

Meb struc

A db 5

B dw 12

C db ‘sort’

Meb ends

Определить количество байт, которые отводятся под описание этого типа.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...