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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|