Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Изучение системы команд Ассемблера. Команды пересылки данных и арифметические командыСодержание книги
Поиск на нашем сайте
Практическое занятие № 11 «Изучение системы команд Ассемблера. Команды пересылки данных и арифметические команды»
Цель работы: изучить использование регистров процессора, изучить команды пересылки и арифметические команды в языке Ассемблер.
Образовательные результаты, заявленные в ФГОС: Студент должен уметь: производить инсталляцию и настройку программного обеспечения компьютерных систем;
знать: основные компоненты программного обеспечения компьютерных систем.
Процессор способен выполнять команды, находящиеся в памяти в виде двоичных кодов. В процессорах iх86 длина команды может составлять от 1 до 12 байт. Первый байт команды содержит код операции, а также некоторую дополнительную информацию (например, о длине обрабатываемых данных). Данные, подлежащие обработке, называются операндами. Каждый операнд может представлять собой байт или слово и находиться в регистре общего назначения или в памяти. Кроме того, существуют команды, использующие в качестве операндов последовательности байтов или слов (строки). Разрабатывать программу, записывая все команды непосредственно в двоичной кодировке, очень трудно. С другой стороны, языки программирования высокого уровня, такие, как Паскаль или Си, намного облегчают написание программ, но они не дают доступа ко всем ресурсам компьютера; размер получаемого кода оказывается значительным. «Золотой серединой» здесь оказывается язык Ассемблер. В этом языке каждой команде процессора соответствует мнемонический код (или мнемокод), т.е. код, удобный для запоминания. Кроме кодов команд, Ассемблер содержит директивы, т.е. служебные инструкции, определяющие формат программы, данных и т.п. Существуют как самостоятельные Ассемблер-системы, так и встроенные в языки высокого уровня (например, в системе Borland Pascal). Использование регистров процессора Регистр – специально отведенная память для временного хранения каких-то данных. Микропроцессоры i8086 имеют 14 регистров.
Таблица 11.1 – Регистры данных (регистры общего назначения, РОН)
РОН могут использоваться программистом по своему усмотрению (за исключением некоторых случаев). В них можно хранить любые данные: числа, адреса и пр. В верхнем ряду таблицы 11.1 находятся шестнадцатиразрядные регистры, которые могут хранить числа от 0 до 65535 или от 0h до FFFFh в шестнадцатеричной системе счисления. В следующей строке расположен ряд восьмиразрядных регистров. В них можно загружать максимальное число 255 (FFh). Они представляют собой старшую (High) и младшую (Low) половинки шестнадцатиразрядных регистров.
Таблица 11.2 – Регистры-указатели
Регистры SI и DI используются в строковых операциях.
Таблица 11.3 – Сегментные регистры
Сегментные регистры необходимы для обращения к тому или иному сегменту памяти. Команды пересылки данных и загрузки
Таблица 11.4 – Команды пересылки данных, загрузки адресов
Команда MOV (to move – передвигать, перемещать) осуществляет пересылку байта или слова из источника (это второй операнд, «op2») в место назначения (первый операнд, он же операнд-получатель, «op1»). В качестве источника и получателя могут служить РОН, индексный или сегментный регистр, ячейка памяти. Источником могут также являться данные (константа), непосредственно указанные в команде. Пример MOV AX, 5050 – записать число 5050 в регистр АХ. MOV AX, BX – переместить число из регистра ВХ в регистр АХ. Команда XCHG (to exchange – переставлять) осуществляет обмен байтами или словами между своими операндами (РОН, индексные регистры, память). Сегментные регистры не могут использоваться при обмене. В этих командах, как и многих других двухоперандных командах рассматриваемых МП, недопустимы сочетания операндов типа «память-память», что представляет определённые неудобства при программировании. Команда LEA (Load Executable Address) носит название «загрузить исполнительный адрес». По этой команде извлекается не сам операнд, а его исполнительный адрес. Действие команды состоит в передаче вычисленного 16-разрядного адреса (внутрисегментного смещения) операнда в 16-разрядный регистр. Арифметические команды В классической системе команд 8086-совместимых процессоров существуют все четыре арифметические действия – сложение, вычитание, умножение, деление над 8- и 16-разрядными данными, представляющими целые числа.
Таблица 11.5 – Арифметические команды
Команда ADD (addition) выполняет сложение операнда-источника («op2») с операндом места назначения («op1»). Операндами могут быть регистры и ячейки памяти, причём в качестве источника может быть указано число (константа). Команда SUB (subtraction) выполняет вычитание операнда-источника из операнда-получателя (op1-op2), записывая результат на место первого операнда. Опять же могут быть использованы регистры, память; вычитаемое может быть константой. Операции «память-память» в этих командах недопустимы, то есть нельзя указывать ссылку на ячейку памяти одновременно и в первом и во втором операнде. Если это необходимо согласно алгоритму решения задачи, следует использовать операцию «регистр-память», а затем переслать (командой MOV) результат из указанного регистра в другую ячейку памяти. Команда инкремента INC увеличивает свой единственный операнд на единицу, команда декремента DEC – уменьшает. Эти команды удобно применять, например, в цикле при необходимости наращивания или уменьшения какого-либо счётчика, адреса и т.п. Команда MUL (multiplication), осуществляющая умножение, более сложна в использовании. Она имеет лишь один операнд – первый множитель. Где указывается второй и где окажется результат зависит от того, будет ли работать команда со словом или с байтом. Пусть в качестве единственного операнда указан регистр или ячейка размером в байт (например, MUL CL). Тогда второй множитель (тоже байт) берётся обязательно из регистра AL, а результат (16-разрядный, т.е. длиной в слово) окажется в регистре AX: AX ← AL*op. Если же операнд «op» взят 16-разрядным (например, MUL CX), то команда выполнит следующее действие: DXAX ← AX*op, то есть второй множитель, также 16-разрядный, будет автоматически взят из регистра AX, а результат размером в двойное слово, т.е. 32-разрядный, окажется в регистровой паре, состоящей из DX и AX. Команда деления DIV работает следующим образом. Как и в команде MUL, здесь указывается единственный операнд, который является делителем. Этот делитель опять же может быть словом или байтом. Если «op» – байт, то команда выполняется как ((AH-остаток) и (AL-частное)) ← AX/op, то есть делимое берётся из 16-разрядного регистра AX, 8-разрядное частное оказывается записанным в AL, остаток такой же размерности – в AH. Если же «op» – 16-разрядное слово, то МП выполнит команду как ((DX-остаток) и (AX-частное)) ← DXAX/op, то есть 32-разрядное делимое будет взято из регистровой пары DXAX, частное окажется в AX, остаток – в DX (оба – 16-разрядные). Примеры разработки программ Задание: записать во все РОН целое число 5050. Данное нам число – это константа. Для записи констант в какие-либо регистры в нашем распоряжении есть команда MOV (таблица 11.4). Число 5050 превосходит максимальное значение для байта (255), но меньше максимального значения для машинного слова (65535). Следовательно, будем использовать 16-разрядные регистры. Программа будет выглядеть так: MOV AX, 5050 MOV BX, AX MOV CX, AX MOV DX, AX
Задание: вычислить выражение (25*7+137*5-60) и результат оставить в регистре AX. Из рассмотрения данного выражения следует, что нам понадобятся команды ADD (сложить), MUL (умножить), SUB (вычесть), приведённые в таблице 6.5, а также MOV (переслать). Получим сначала произведение 25*7 и сохраним его; затем получим произведение 137*5 и сложим оба частичных результата; вычтем 60 из того, что получилось. Приходим к программе: MOV AL, 25 ; записать в AL число 25 MOV DL, 7 ; записать в DL число 7 MUL DL ; теперь AX = 25*7 MOV BX, AX; копировать из АХ в ВХ, теперь BX = 25*7 MOV AL, 137 MOV DL, 5 MUL DL ; AX = 137*5 ADD AX, BX ; AX = 25*7 + 137* 5 SUB AX, 60 ; AX уменьшен на 60
Задания для практической работы
1 Составить таблицу «Регистры процессора» с указанием названия регистра и его назначения. 2 Составить таблицу «Команды Ассемблера» с указанием названия команды, ее мнемокода и выполняемого действия. 3 Разработать программу на языке Ассемблер для вычисления арифметического выражения (таблица 11.6) и сохранения результата в указанном регистре.
Таблица 11.6 – Таблица вариантов
Контрольные вопросы
1 Что называется операндом и мнемокодом? 2 Что такое регистры процессора? Для чего используются регистры общего назначения? 3 Чем отличаются команды ADD и INC? 4 Какое сочетание операндов недопустимо для большинства двухоперандных команд Ассемблера?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2020-03-27; просмотров: 308; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.011 с.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||