Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Умножение беззнаковых величин





Умножение двух 16-битных чисел может дать 32-разрядный результат, поэтому инструкция умножения MUL (multiply — умножить) размещает результат в двух регистрах DX и AX. Старшие 16 бит помещаются в регистр DX, а младшие в AX.

Замечание.

При выполнении операции умножения одним из множителей всегда является значение из регистра AX.

Задание.

Выполните умножение чисел 7C4Bh (в регистр AX) и 100h (BX).

Каков результат операции и почему?

Деление беззнаковых величин

Команды микропроцессора предназначены для выполнения целочисленных операций. Так как деление целых чисел нацело происходит далеко не всегда, то результат деления формируется из двух целых чисел — частного и остатка от деления.

Делимое всегда помещается в пару регистров AX:DX, поэтому в инструкции деления DIV (divide — делить) необходимо указать только регистр с делителем. После выполнения деление регистр AX будет содержать частное, а регистр DX — остаток.

Задание.

Выполните деление числа 7C4B12h (DX=007Ch, AX=4B12h) на 0100h (BX).

Каков результат выполнения операции и почему?

Пересылка (копирование) данных

Для изменения содержимого регистров программным путем обычно используют команду MOV (move — внести), которая позволяет копировать в один регистр число или содержимое другого регистра. Первый операнд инструкции MOV указывает адресата (куда переслать значение), а второй — пересылаемое значение или регистр, его содержащий.

Задание.

С помощью команды MOV поместите числа 1234h и ABCDh, соответственно, в регистры AX и DX. Соответствующие инструкции поместите по адресам 0100h и 0102h.

Далее с помощью команды MOV поместите содержимое младшего байта регистра DX в старший байт регистра AX.

Понятие переполнения

Как и в случае умножения, при выполнении сложения результат может выходить за 16-разрядную сетку (четыре шестнадцатеричных числа). Например, результатом сложения четырехзначных чисел FFFFh и 1h будет пятизначное число 10000h, для записи которого слова (двух байт) недостаточно.

Если результат выполнения операции (над беззнаковыми величинами!) не может быть полностью размещен в регистре, то говорят о возникновения переполнения.

При выполнении сложения беззнаковых чисел суть переполнения (в двоичном представлении) состоит в том, что в результате сложения двух единиц в старшем разряде возникает единица, выходящая за разрядную сетку результирующего регистра. Естественно, что эта единица в регистр помещена быть не может, и при записи в регистр отсекается.

Задание.

Выполните сложение чисел FFFFh (AX) и 1h (BX). Каков результат операции?

Регистр флагов.

Флаг - это бит, принимающий значение 1 ("флаг установлен"), если выполнено некоторое условие, и значение 0 ("флаг сброшен") в противном случае. В ПК используется 9 флагов, причем конструктивно они собраны в один 16-разрядный регистр, называемый регистром флагов и обозначаемый как Flags. Эти биты обозначаются буквами C, P, A, Z, S, T, I, D, O. Например, в текстовый редактор загружен текст. Как только вы внесли в текст первое изменение, можно установить в 1 флаг изменений. После сохранения текста значение флага сбрасывается (0). Тогда при выходе из редактора легко проверить, сохранены ли изменения.

Флаг переноса

Если при сложении беззнаковых чисел происходит переполнение (возникает единица переноса за пределы разрядной сетки регистра), то единичка переноса записывается в Carry Flag. В правой половине окна регистров и флагов (Registers) данный флаг обозначается буквой С. Флаг переноса переустанавливается в каждой операции сложения.

Задание.

Проследите за изменением состояния флага переноса при последовательном выполнении следующих операций

1. FFFF + 1

2. FF00 + 1

Использование флага переноса

I. Сложение с использованием флага переноса.

Рассмотренная ранее инструкция сложения ADD выполняет простое сложение двух беззнаковых кодов. Инструкция ADC складывает три числа: два операнда из регистров общего назначения, как и раньше, плюс значение бита флага переноса из регистра флагов.

Задание.

а) Выполните сложение FFFFh и 1.

б) Затем выполните инструкцию: ADC BX, AX

В результате сложения 1 и 0, в регистре BX будет число 2. (надо пояснить, что останется в регистрах после первой операции).

II. Вычитание с использованием флага переноса.

При выполнении инструкции SBB из разности операндов вычитается значение флага переноса.

Задание.

а) Выполните сложение FFFFh и 1.

б) Затем выполните инструкцию: SBB BX, AX

Флаг нуля.

Занесите в регистры BX и AX два равных числа, теперь инструкцией SUB произведите вычитание одного числа из другого, в результате чего должен быть установлен флаг нуля Z=1 (Zero Flag).

Флаг знака.

Данный флаг позволяет узнать знак числа. Если вычесть из нуля единицу то результат будет FFFFh, при этом устанавливается флаг знака S=1 (Sign Flag).

Флаг переполнения.

Флаг переполнения устанавливается в той ситуации, когда этого не должно было произойти. Занесите в регистр AX число 7000h, а в BX 6000h и выполните инструкцию сложения, в результате AX будет содержать число D000h или-12288. Это ошибка, так как результат переполняет слово и является отрицательным, поэтому микропроцессор устанавливает флаг переполнения О=1(Overflow Flag)

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

1. Каковы задача и содержание этапа отладки программ?

2. Типы программ-отладчиков и особенности их работы.

3. Понятие регистра микропроцессора и машинного слова.

4. Какая инструкция позволяет выполнять сложение целых чисел? Где размещаются операнды и результат?

5. Какова последовательность выполнения инструкции сложения чисел в среде программы Turbo Debugger?

6. Какая инструкция позволяет выполнять вычитание целых чисел? Где размещаются операнды и результат?

7. В каком виде микропроцессор представляет отрицательные числа? Как будет представлен результат выполнения операции 5h – 8h?

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

9. Какими особенностями обладает инструкция умножения целых чисел? Где размещаются операнды и результат?

10. Какими особенностями обладает инструкция деления целых чисел? Где размещаются операнды и результат?

11. Поясните, что означает термин "переполнение". Как выяснить, что при выполнении операции произошло переполнение?

12. Что такое флаг, и для чего он нужен?

13. С помощью какой инструкции, и каким образом происходит сложение с учетом флага переноса?

14. С помощью какой инструкции, и каким образом происходит вычитание с учетом флага переноса?

15. Объясните назначение флагов переноса и нуля?

16. Объясните назначение флагов переполнения и знака?


Начальные сведения о языке Ассемблер

Аппаратная поддержка языка

При выполнении программы, микропроцессор взаимодействует с оперативной памятью, где хранятся исполняемая программа и данные, а так же с периферийными устройствами.

Программируемая структура процессора

Для организации вычислений микропроцессор i8086 имеет в своём составе 14 шестнадцатиразрядных регистров, которые обеспечивают выполнение программы:

Регистры общего назначения     Сегмент­ные регистры   Специ­альные регистры  
AH AL AX   CS   SP Указатель стека
BH BL BX   DS   BP Указатель базы стека
CH CL CX   ES   IP Указатель инструкций
DH DL DX   SS   FLAGS Регистр флагов
SI            
DI            

 

Регистры общего назначения:

AX(AH, AL), BX(BH, BL), CX(CH, CL), DX(DH, DL) делятся программно на пары однобайтных регистров и могут использоваться для хранения данных. Разбиение на однобайтные регистры позволяет увеличить общее число регистров;

SP, BP – указатель и база стека, соответственно, обеспечивают доступ к данным в стеке, могут использоваться для хранения данных, но делать это не рекомендуется, так как при этом возможно нарушение адресации в стеке, особенно при использовании SP.

SI, DI – шестнадцатиразрядные регистры для хранения данных.

CS, DS, ES, SS – хранят адреса сегментов в памяти, не могут использоваться для хранения данных.

IP – регистр инструкций – хранит адрес(смещение) следующей исполняемой команды.

FLAGS – регистр флагов содержит набор битовых флагов, определяющий текущее состояние процессора и результат выполнения предыдущей команды (таблица 2.1).

Таблица 2.1
Регистр флагов процессора
Флаг Название Назначение
О Перепол­нение Переполнение при выполнении арифметических операций
D Направле­ние Направление пересылки данных при выполнении строковых команд
I Прерыва­ние Разрешает/Запрещает внешние прерывания
T Пошаговый режим Останов после выполнения каждой команды(используется отладчиками)
S Знак Знак результата выполненной команды(0 – плюс, 1 – минус)
Z Ноль Значение результата выполненной команды(0 – ненулевой, 1 – нулевой)
A Внешний перенос Используется для специальных арифметических операций
P Контроль чётности Число единиц в операнде(0 – нечётное, 1 – нечётное)
C Перенос Содержит перенос из старшего бита при выполнении арифметических операциях

Структура памяти

Память, с которой взаимодействует процессор при обработке программ, называется Оперативным Запоминающим Устройством(ОЗУ) или Random Access Memory(RAM). Она состоит из набора однобайтных ячеек, обращение к которым происходит по их номерам(физическим адресам). Число ячеек зависит от ширины шины адреса и составляет для процессора i8086(ширина шины адреса равна 20) 220 – ячеек(1Мбайт). Для современных процессоров с шириной шины адреса 32 объём ОЗУ может доходить до 4 Гбайт.

Данные можно читать или сохранять в ОЗУ байтами, указывая номер требуемой ячейки или словами(2 байта), указывая адрес младшей ячейки памяти и вводя специальный префикс.

Сегментация памяти

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

Один из них – сегментный, он хранит адрес начала блока памяти, который и называется сегментом. Если к шестнадцати разрядам сегмента мысленно справа дописать четыре двоичных нуля(16+4=20), то получим физический адрес начала сегмента в ОЗУ. Второй регистр хранит величину смещения адреса требуемой ячейки от начала сегмента. Адрес ячейки памяти записывается в виде двойного слова(4 байта): <сегмент>:<сме­ще­ние>.

Сегмент всегда начинается с ячейки, номер которой заканчивается на 4 двоичных(или один шестнадцатеричный) нуля. Минимальная длина сегмента 16 байтов(параграф). Максимальная длина определяется длиной регистра, хранящего смещение и равна 216(64 Кбайта).

Пара регистров CS:IP(<сегмент>:<смещение>) определяют адрес следующей команды программы.

Для адресации данных используются сегментные регистры DS и ES, а в качестве регистров, хранящих смещение, используются регистры общего назначения BX, SI, DI. Для работы с сегментом стека используют сегментный регистр SS и регистр BP.







Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...

Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.