Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_SP.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
101.17 Кб
Скачать
  1. Дайте определение понятия «система программирования». Приведите примеры современных систем программирования.

Система программирования - это программная система, предназначенная для разработки программ на конкретном языке программирования.

C++, C#, Microsoft Visual Basic, Borland Delphi, Pascal и др.

  1. Перечислите основные типы данных микропроцессора.

С точки зрения размерности микропроцессор аппаратно поддерживает следующие основные типы данных :

•байт — восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом;

•слово — последовательность из двух байт, имеющих последовательные адреса. Размер слова — 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность — младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

•двойное слово — последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 0 до 31. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, - старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова.

•учетверенное слово — последовательность из восьми байт (64 бита), расположенных по последовательным адресам. Нумерация бит производится от 0 до 63. Двойное слово, содержащее нулевой бит, называется младшим двойным словом, а двойное слово, содержащее 63-й бит, — старшим двойным словом. Младшее двойное слово хранится по меньшему адресу. Адресом учетверенного слова считается адрес его младшего двойного слова. Адрес старшего двойного слова может быть использован для доступа к старшей половине учетверенного слова.

 

  1. Опишите данные микропроцессора простого типа с точки зрения их размерности разрядности.

Целый тип со знаком — двоичное значение со знаком, размером 8, 16 или 32 бита. Знак в этом двоичном числе содержится в 7, 15 или 31-м бите соответственно. Ноль в этих битах в операндах соответствует положительному числу, а единица — отрицательному. Отрицательные числа представляются в дополнительном коде. Числовые диапазоны для этого типа данных следующие:

•8-разрядное целое — от –128 до +127;

•16-разрядное целое — от –32 768 до +32 767;

•32-разрядное целое — от –231 до +231–1.

 

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

•байт — от 0 до 255;

•слово — от 0 до 65 535;

•двойное слово — от 0 до 232–1.

 

Указатель на память двух типов:

ближнего типа — 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента. Эти указатели могут также использоваться в сплошной (плоской) модели памяти, где сегментные составляющие одинаковы;

•дальнего типа — 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части — селектора, и 32-разрядного смещения.

Цепочка — представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.

Битовое поле представляет собой непрерывную последовательность бит, в которой каждый бит является независимым и может рассматриваться как отдельная переменная. Битовое поле может начинаться с любого бита любого байта и содержать до 32 бит.

Неупакованный двоично-десятичный тип — байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.

Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте (биты 4–7) является старшей.

 

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

физический

  • байт — восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом;

  • слово — последовательность из двух байт, имеющих последовательные адреса. Размер слова — 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность — младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

  • двойное слово — последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 0 до 31. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, - старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова.

  • учетверенное слово — последовательность из восьми байт (64 бита), расположенных по последовательным адресам. Нумерация бит производится от 0 до 63. Двойное слово, содержащее нулевой бит, называется младшим двойным словом, а двойное слово, содержащее 63-й бит, — старшим двойным словом. Младшее двойное слово хранится по меньшему адресу. Адресом учетверенного слова считается адрес его младшего двойного слова. Адрес старшего двойного слова может быть использован для доступа к старшей половине учетверенного слова.

логический

  • Целый тип со знаком — двоичное значение со знаком, размером 8, 16 или 32 бита. Знак в этом двоичном числе содержится в 7, 15 или 31-м бите соответственно. Ноль в этих битах в операндах соответствует положительному числу, а единица — отрицательному. Отрицательные числа представляются в дополнительном коде. Числовые диапазоны для этого типа данных следующие:

  • •8-разрядное целое — от –128 до +127;

  • •16-разрядное целое — от –32 768 до +32 767;

  • •32-разрядное целое — от –231 до +231–1.

  •  

  • Целый тип без знака — двоичное значение без знака, размером 8, 16 или 32 бита. Числовой диапазон для этого типа следующий:

  • •байт — от 0 до 255;

  • •слово — от 0 до 65 535;

  • •двойное слово — от 0 до 232–1.

  •  

  • Указатель на память двух типов:

  • ближнего типа — 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента. Эти указатели могут также использоваться в сплошной (плоской) модели памяти, где сегментные составляющие одинаковы;

  • •дальнего типа — 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части — селектора, и 32-разрядного смещения.

  • Цепочка — представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.

  • Битовое поле представляет собой непрерывную последовательность бит, в которой каждый бит является независимым и может рассматриваться как отдельная переменная. Битовое поле может начинаться с любого бита любого байта и содержать до 32 бит.

  • Неупакованный двоично-десятичный тип — байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.

  • Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте (биты 4–7) является старшей.

  1. Опишите порядок размещения данных в памяти для микропроцессоров Intel. Поясните этот порядок на примере

Микропроцессоры Intel имеют важную особенность — младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

Листинг 1. Пример использования директив резервирования и инициализации данных

masm

model small

.stack 100h

.data

message db 'Запустите эту программу в отладчике’,’$'

perem_1 db 0ffh

perem_2 dw 3a7fh

perem_3 dd 0f54d567ah

mas db 10 dup (' ')

pole_1 db 5 dup (?)

adr dw perem_3

adr_full dd perem_3

fin db 'Конец сегмента данных программы $'

.code

start:

mov ax,@data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ax,4c00h

int 21h

end start

  1. Перечислите регистры общего назначения для микропроцессоров Intel. Укажите разрядность перечисленных регистров. Охарактеризуйте каждый регистр с точки зрения его использования и функционального назначения.

Рассматривая этот рисунок, заметьте, что использовать для самостоятельной адресации можно только младшие 16 и 8-битные части этих регистров. Старшие 16 бит этих регистров как самостоятельные объекты недоступны. Это сделано, как мы отметили выше, для совместимости с младшими 16-разрядными моделями микропроцессоров фирмы Intel.

Перечислим регистры, относящиеся к группе регистров общего назначения. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), то их еще называют регистрами АЛУ:

  • eax/ax/ah/al (Accumulator register) — аккумулятор.  Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно;

  • ebx/bx/bh/bl (Base register) — базовый регистр.  Применяется для хранения базового адреса некоторого объекта в памяти;

  • ecx/cx/ch/cl (Count register) — регистр-счетчик.  Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды.  К примеру, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистраecx/cx;

  • edx/dx/dh/dl (Data register) — регистр данных.  Так же, как и регистр eax/ax/ah/al, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно.

Следующие два регистра используются для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:

  • esi/si (Source Index register) — индекс источника.  Этот регистр в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;

  • edi/di (Destination Index register) — индекс приемника (получателя).  Этот регистр в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

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

  • esp/sp (Stack Pointer register) — регистр указателя стека.  Содержит указатель вершины стека в текущем сегменте стека.

  • ebp/bp (Base Pointer register) — регистр указателя базы кадра стека.  Предназначен для организации произвольного доступа к данным внутри стека.

Не спешите пугаться столь жесткого функционального назначения регистров АЛУ. На самом деле, большинство из них могут использоваться при программировании для хранения операндов практически в любых сочетаниях. Но, как мы отметили выше, некоторые команды используют фиксированные регистры для выполнения своих действий. Это нужно обязательно учитывать.  Использование жесткого закрепления регистров для некоторых команд позволяет более компактно кодировать их машинное представление. Знание этих особенностей позволит вам при необходимости хотя бы на несколько байт сэкономить память, занимаемую кодом программы.

  1. Перечислите сегментные регистры для микропроцессоров Intel. Укажите разрядность перечисленных регистров. Определите функциональное назначение каждого из регистров.

В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs.  Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Она заключается в том, что микропроцессор аппаратно поддерживает структурную организацию программы в виде трех частей, называемых сегментами. Соответственно, такая организация памяти называется сегментной.

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

Сегмент кода. Содержит команды программы.  Для доступа к этому сегменту служит регистр cs (code segment register) — сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (то есть эти команды загружаются в конвейер микропроцессора).

Сегмент данных. Содержит обрабатываемые программой данные.  Для доступа к этому сегменту служит регистр ds (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей программы.

Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком.  Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) — сегментный регистр стека, содержащий адрес сегмента стека.

Дополнительный сегмент данных.  Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds.  Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде.  Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).

  1. Опишите регистр состояния для микропроцессоров Intel с точки зрения его использования и функционального назначения.

В микропроцессор включены несколько регистров (см. рис. 1), которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:

  • регистр флагов eflags/flags;

  • регистр указателя команды eip/ip.

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

eflags/flags (flag register) — регистр флагов. Разрядность eflags/flags — 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086. 

сходя из особенностей использования, флаги регистра eflags/flags можно разделить на три группы:

  • 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд.  Флаги состояния регистра eflags отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм. В табл. 1 приведены флаги состояния и указано их назначение;

  • 1 флаг управления. Обозначается df (Directory Flag).  Он находится в 10-м бите регистра eflags и используется цепочечными командами. Значение флага df определяет направление поэлементной обработки в этих операциях: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1).  Для работы с флагом df существуют специальные команды: cld (снять флаг df) и std (установить флаг df).  Применение этих команд позволяет привести флаг df в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками;

  • 5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.  Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы. Втабл. 2 перечислены системные флаги, их назначение.

ip/ip (Instraction Pointer register) — регистр-указатель команд.  Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.

  1. Перечислите этапы создания программы на языке ассемблера. Опишите результат, получаемый на каждом этапе.

Постановка задачи (точное и подробное описание функциональности будущей программы, а также описание всех входных и выходных данных и способа их передачи программе);

Разработка алгоритма программы (построение блок схемы, граф-схемы или текстовое или математическое описание решения);

Формализация алгоритма (запись алгоритма на языке программирования). Создание текстового файла программы с расширением .asm (например my.asm). Отсутствие среды разработки позволяет программисту самостоятельно выбрать текстовый редактор для написания кода программы. Для этой цели подойдет любой текстовый редактор с нумерацией строк, мы рекомендуем редактор, встроенный в оболочку "FAR Manager".

Компиляция программы; Компиляция - процесс перевода программы из текстового вида в машинный код. При использовании компилятора фирмы Borland необходимо выполнить: tasm my.asm т.е. запускаем компилятор tasm и передаем с командной строки имя файла, содержащего программу. Если программа имеет синтаксические ошибки, компилятор выдаст сообщение об ошибке с указанием номера строки и описанием для каждой ошибки (нужно вернуться на этап №3 и исправить синтаксические ошибки). В случае успешной компиляции будет создан файл, содержащий объектный код программы my.obj, который ещё не является исполняемым модулем.

Компоновка программы; Компоновка - создание из файла объектного кода исполняемого модуля. tlink my.obj  В качестве параметра компоновщик tlink принимает имя файла содержащего объектный код программы (в нашем случае - my.obj). В случае успешной компоновки будет создан исполняемый модуль my.exe

Запуск и тестирование исполняемого модуля программы.  На данном этапе необходимо проверить, соответствует ли написанная программа постановке задачи, сделанной нами на этапе №1. Неправильная работа программы говорит об алгоритмической ошибке (семантическая ошибка), поэтому для успешного её устранения нужно вернуться на этап разработки алгоритма (этап №2).

  1. Дайте определение понятия «операнд». Приведите классификацию операндов, поддерживаемых транслятором ассемблера

Операнд – часть команды над которым производится действеие.

Постоянные или непосредственные операнды — число, строка, имя или выражение, имеющие некоторое фиксированное значение. Имя не должно быть перемещаемым, то есть зависеть от адреса загрузки программы в память. К примеру, оно может быть определено операторами equ или =.

Адресные операнды — задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента исмещения (рис. 4).

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

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

Счетчик адреса — специфический вид операнда. Он обозначается знаком $.

Специфика этого операнда в том, что когда транслятор ассемблера встречает в исходной программе этот символ, то он подставляет вместо него текущее значение счетчика адреса. Значение счетчика адреса, или, как его иногда называют, счетчика размещения, представляет собой смещение текущей машинной команды относительно начала сегмента кода.  В формате листинга счетчику адреса соответствует вторая или третья колонка (в зависимости от того, присутствует или нет в листинге колонка с уровнем вложенности). Если взять в качестве пример любой листинг, то видно, что при обработке транслятором очередной команды ассемблера счетчик адреса увеличивается на длину сформированной машинной команды. Важно правильно понимать этот момент.  К примеру, обработка директив ассемблера не влечет за собой изменения счетчика. Директивы, в отличие от команд ассемблера, — это лишь указания транслятору на выполнение определенных действий по формированию машинного представления программы, и для них транслятором не генерируется никаких конструкций в памяти. В качестве примера использования в команде значения счетчика адреса можно привести следующий:

При использовании подобного выражения для перехода не забывайте о длине самой команды, в которой это выражение используется, так как значение счетчика адреса соответствует смещению в сегменте команд данной, а не следующей за ней команды. В нашем примере команда jmp занимает 2 байта. Но будьте осторожны, длина команды зависит от того, какие в ней используются операнды. Команда с регистровыми операндами будет короче команды, один из операндов которой расположен в памяти. В большинстве случаев эту информацию можно получить, зная формат машинной команды и анализируя колонку листинга с объектным кодом команды.

Регистровый операнд — это просто имя регистра. В программе на ассемблере можно использовать имена всех регистров общего назначения и большинства системных регистров.

Базовый и индексный операнды. Этот тип операндов используется для реализации косвенной базовой, косвенной индексной адресации или их комбинаций и расширений.

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

Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.

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

Команда CLR (очистка) «стирает» операнд, т. е. записывает на его место 0. Команда INC (инкремент) увеличивает операнд на 1. - Указанные команды относятся к классу однооперандных или одноадресных, так как по своему смыслу они воздействуют только на один операнд. Многие команды должны работать с двумя операндами. Один из них называют источником, другой — прием­ником. Приведем примеры таких команд. Команда MOV (пересылка) передает операнд-источник по адресу операнда-приемника, например содержимое одного регистра в другой либо содержимое регистра в ячейку памяти. При этом операнд-источник не изменяется. Команда ADD (сложение) прибавляет операнд-источник к операнду-приемнику и отправляет полученную сумму по адресу операнда-приемника. При этом операнд-источник не изменяется.  Собственно команда (оператор предложения АССЕМБЛЕРа) указывает только характер действия, которое надо выполнить над операндами. Местонахождение операндов (а они могут содержаться либо в РОН, либо в ячейках оперативной памяти) указывается с помощью адреса, входящего в полный код команды.Адрес может задаваться различными способами. Всего существует 12 различных способов адресации. Первые восемь из них в процессе обращения к операндам используют РОН с RO no R6. Какой именно регистр использовать для поиска операнда, определяет программист, указывая мнемоническое обозначение выбранного регистра (RO, R1 и т. д.) в программной строке. ^ Адресация через регистры общего назначения RO—R6 Прямая адресация используется в тех случаях, когда операнд, участвующий в заданной операции, находится в одном из регист­ров общего назначения. Мнемоническое обозначение Rn, где п — номер используемого регистра общего назначения. Примеры команд с использованием прямой адресации:  INC RA2 ; увеличить содержимое R2 на 1 MOV Rl, R3 " ; переслать содержимое R1 в R3. Задача 5.1. Поменять содержимое регистров RO и R1. Для решения задачи надо воспользоваться вспомогательным регистром, на­пример R4:  MOV RO, R4 MOV Rl, RO MOV R4, R1 Задача 5.2 Сложить содержимое регистров R1,R2,R3. Сумму занести в R5: Проще всего выполнить последовательное сложение прямо в R5. MOV Rl, R5  ADD R2, R5  ADD R3, R5 Задача 5.3 Увеличить содержимое R1 на два. INC R1 INC R1 Задача 5.4. Удвоить содержимое RO ADD R0,RO Косвенная адресация предполагает наличие в регистре адреса операнда, т. е. номера ячейки оперативной памяти (слова или байта), в которой находится операнд. Мнемоническое обозначение (Rn) или @Rn, В приведенных ниже примерах на косвенную адресацию пред­полагается, что в регистре R2 находится число 1000, а в регистре R3 — число 250: CLR (R2) ; очистить ячейку с адресом 1000 MOV(R3), (R2) ; перенести содержимое ячейки с адресом  ; 250 в ячейку с адресом 1000 Задача 5.5 В регистре RO находится адрес начала массива, а в регистре R1- номер нужного элемента. Увеличить этот элемент массива на еденицу. Поскольку порядковые номера присваиваются байтам, а каждое слово содер-жит два байта, адреса слов увеличиваются через 2. При этом 0-й элемент от начала массива имеет смещение 0, 1-й элемент — смещение 2, 2-й элемент смещение 4 и т д. Поэтому для вычесления смещения порядковый номер элемента надо умножить на 2, что можно сделать, сложив содержимое регистра R1 с самим собой. При этом предпологается, что элементы массива нумеруются от нуля:  ADD Rl, Rl ; вычисление смещения ADD Rl, RO ; вычисление адреса INC (RO) ; инкремент элемента При автоинкрементной адресации, как и при косвенной, в ре­гистре находится адрес операнда. Сам операнд хранится в опера­тивной памяти. Отличие от косвенной адресации заключается в том, что после выполнения заданной операции содержимое регистра (т. е. адрес операнда) автоматически увеличивается на 2, если использовалась команда обращения к слову, и на 1, если исполь­зовалась команда работы с байтом (команды с побайтовой адре­сацией будут рассмотрены ниже). Мнемоническое обозначение (Rn)+. Автоинкрементная адресация может использоваться в тех слу­чаях, когда требующая обработки информация расположена в последовательных ячейках оперативной памяти. Пример на автоинкрементную адресацию (в R1 находится число 1000): CLR (Rl)+ ; очистить слово с адресом 1000. После выпол- ; нения команды в регистре R1 адрес 1002 Задача 5.6. Очистить три последовательные ячейки памяти. Адрес первой находится в R1: CLR (Rl)+  CLR (Rl)+ CLR (Rl) При автодекрементной адресации, как и при автоинкрементной, в регистре находится адрес. Однако изменяется этот адрес не после, а до выполнения операции, при этом адрес не увеличивается, а уменьшается на 2 или 1 в зависимости от типа команды (обращение к слову или байту). Мнемоническое обозначение —(Rn). Пример на автодекрементную адресацию (в R1 находится число 166): INC—(R1) - увеличить на единицу содержимое ячейки с адресом 164. После выполнения команды в регистре R1 адрес 164  ^ Автоинкрементную косвенную адресацию можно назвать двой­ной косвенной, поскольку в регистре указывается адрес ячейки, в которой, в свою очередь, записан адрес ячейки с операндом. Инкрементность адресации заключается в том, что после выполнения команды содержимое регистра увеличивается на 2. Мнемоническое обозначение @(Rn)+. Рассмотрим действие автоинкрементной косвенной адресации (рис. 5.5). Пусть в регистре R2 содержится число 102. Оно рассмат­ривается как адрес ячейки памяти, однако по адресу 102 располо­жен не операнд, а адрес операнда. Если в ячейке с адресом 102 содержится число 200, то операнд находится по адресу 200. После выполнения команды содержимое R2 увеличится на 2 и станет равным 104 (ожидается, что по адресу 104 находится следующий операнд или его адрес). Пример на автоинкрементную косвенную адресацию (содер­жимое регистров и ячеек взято из рис. 5. 5): CLR@(R2)+ - очищается ячейка с адресом 200 Важность автоинкрементной косвенной адресации определяется тем, что во многих случаях в программах удобно работать с массивами адресов (числа 400, 200 и 260 на рис. 5.5). Автоинкре­ментная косвенная адресация дает удобную возможность работы с операндами, если их адреса расположены в последовательных ячейках. ^ Автодекрементная косвенная адресация действует в принципе так же, как и предыдущая, с той разницей, что еще перед выполне­нием команды адрес в регистре уменьшается на два, и по этому модифицированному адресу выбирается адрес операнда. Мнемони­ческое обозначение @ — (Rn). Рис. 5.5 Действие автоинкрементной Рис.5.6 Действие индексной адресации.  косвенной адресации. Пример команды для содержимого регистров и ячеек из рис. 5.5: CLR@ — (R2) ; очистка ячейки по адресу 400 Индексная адресация используется прежде всего для работы с массивами операндов. Мнемоническое обозначение -E(Rn), где Е — выражение (подробнее о выражениях см. § 5.4). Чаще всего Е представляет собой символическое обозначение метки. Адрес операнда определяется как сумма содержимого регистра Rn и значения Е. Пусть метка МА относится к началу массива данных (рис. 5.6). Тогда следующие за МА слова имеют адреса МА+2, МА+4, МА+6 и т. д. Если заносить в какой-либо из регистров общего назначения этот «добавок» к значению МА и использовать этот регистр для индексной адресации, то можно будет обращаться к любым элементам массива. Если (как это показано на рис. 5.6) в R5 находится число 4, то команда CLR MA(R5) очистит ячейку с адресом МА+4. Полный код команды, использующей индексную адресацию, тре­бует не одного, как это было до сих пор, а двух слов памяти. В первом слове находится собственно код команды, а во второе слово заносится (в процессе трансляции) значение выражения Е. Таким образом, при использовании индексной адресации опера­тивная память расходуется менее экономно, чем в предыдущих случаях. Задача 5.7 Увеличить на еденицу все элементы массива из 100 слов, начинающихся с метки ММ. CLR R2 ;подготовка (очистка) индексного регистра PP: INC MM(R2) ; содержательная строка цикла INC R2 ; изменение INC R2 ;индекса элемента ; переход на метку PP, если содержимое R2 < 200 В рассмотренных примерах использованная метка характеризо­вала адрес начала массива («базовый» адрес), а в регистре нахо­дилось смещение относительно этой базы. Иногда удобно хранить базовый адрес в регистре. Тогда в символическом обозначении команды используют не метку, а абсолютное значение смещения. Если, например, в регистр R2 помещен адрес 164000, то команда CLR(R2) очистит слово с адресом 164000, команда INC 2(R2) до­бавит единицу к содержимому слова с адресом 164002, а команда CLR 4(R2) очистит слово с адресом 164004. I ^ Индексную косвенную адресацию можно использовать, наприvep, для работы с массивами адресов. Мнемоническое обозначение @E(Rn). Здесь адрес вычисляется так же, как и в предыдущем случае (сумма значения Е и содержимого регистра), но это не адрес операнда,а адрес адреса операнда. Команда занимает в па­мяти два слова; во втором слове хранится значение Е. ^ Адресация через счетчик команд Рассмотрим теперь оставшиеся четыре способа адресации. Все они используют для поиска операнда счетчик команд R7, что дает новые очень полезные возможности. При этом программисту в большинстве случаев важно понимать только конечный результат, к которому приводит применение этих способов адресации. Роль счетчика команд и механизм адресации с его помощью можно отнести к несущественным тонкостям работы процессора. ^ Непосредственная адресация предназначена для работы с опе­рандом, входящим непосредственно в символическую запись ко­манды. Мнемоническое обозначение #Е, где Е — выражение, являющееся операндом. Чаще всего Е представляет собой просто число или символическое обозначение метки. В последнем случае опе­рандом является значение этой метки, т. е. адрес соответствующей ячейки. Команда занимает два слова. В первом содержится код Команды, во втором — операнд. Примеры команд: MOV #15,R3 ;загрузка числа 15 в R3 MOV #PARM,R2 ; загрузка адреса PARM в R2 Задача 5.8 Метка SPECTR характеризует начало массива. Определить адрес 126-го элементаи занести его в R0.  Воспользуемся регистром R0 для определения смещения относительно начала массива, а затем для нахождения адреса искомого элемента, определяемого суммой смещения и базового адреса, т. е. Значения метки SPECTR: MOV #126, RO ; в R0-адрес элемента  ADD R0,R0 ; в R0- смещение к элементу  ADD #SPECTR,R0 ; прибавить к смещению базовый адрес ^ Абсолютная адресация используется для обращения по адресам, значения которых фиксированы и известны заранее. Чаще всего это адреса ячеек системных областей памяти и регистров внешних устройств. Мнемоническое обозначение @#Е, где Е — выражение, вычисление которого дает абсолютный адрес. Команда занимает два слова памяти. Во второе слово транслятором заносится ука­занный в команде абсолютный адрес. Пример команды: MOV @#52, R3 ; переслать в R3 содержимое ячейки ; с абсолютным адресом 52  ^ Относительная адресация позволяет обращаться к ячейкам по присвоенным им меткам. Мнемоническое обозначение Е. Значение выражения Е является адресом операнда. Команда занимает два слова памяти, при этом во втором слове записывается смещение к указанному в команде адресу. Это смещение вычисляется относи­тельно адреса следующей команды. Задача 5.9 Поменять местами содержимое ячеек X,Y: MOV X, RO  MOV Y..X  MOV RO, Y ^ Относительная косвенная адресация является косвенной по отношению к предыдущей. Структура кода команды и метод вычис­ления адреса такие же, но полученный адрес есть не адрес операн­да, а адрес адреса операнда. Мнемоническое обозначение @Е. Пример: CLR @LL ; очистка ячейки, адрес которой находится в ячейке  ; с меткой LL В табл. П5 и П6 сведены все способы адресации вместе с мнемоникой и кратким описанием. 

  1. Дайте определение понятия «директива» в ассемблере. Перечислите директивы резервирования и инициализации данных простого типа. Охарактеризуйте каждый тип с точки зрения формата представления и диапазона принимаемых значений. Приведите примеры использования директив резервирования и инициализации данных.

Директивы - параметры (ключевые слова) в тексте программы на языке ассемблера, влияющие на процесс ассемблирования или свойства выходного файла.

Директивы резервирования и инициализации данных простых типов:

 

•db — резервирование памяти для данных размером 1 байт.

•dw — резервирование памяти для данных размером 2 байта.

•dd — резервирование памяти для данных размером 4 байта.

•df — резервирование памяти для данных размером 6 байт;

•dp — резервирование памяти для данных размером 6 байт.

•dq — резервирование памяти для данных размером 8 байт.

•dt — резервирование памяти для данных размером 10 байт.

 

Формат этих директив :

            [<имя >]    Dx    <выражение>

Выражение может быть  

1)  константой,               Perem1    DB   100

2)последовательностью констант    

 Massiv   DW   0,0,0,0,0  ; 5 элементов. Каждый по 2 б.

       3) цепочкой символов, закл. в кавычки

                                    Message DB  ‘ Результат выполнения программы - ‘

            4) символическим именем (из поля <имя> этой или другой директивы)

Когда транслятор встречает директивы описания памяти с подобными операндами, то он формирует в памяти значения адресов тех переменных, чьи имена были указаны в качестве операндов. В зависимости от директивы, применяемой для получения такого адреса, формируется либо полный адрес (директива dd) в виде двух байтов сегментного адреса и двух байтов смещения, либо только смещение (директива dw).

                                    perem2           dd        0f54d567ah

adr                  dw       perem2

adr_full            dd        perem2

5)  вопросительным знаком ?     например,   Pole   db    ?

                        Означает резервирование памяти без инициализации (присвоения нач. знач.)

                        Замеч. В памяти этот байт будет 00h.

 

6)  Для повторения операндов можно использовать директиву DUP

(duplicate - повторять, дублировать)

                        Massiv1   dw   5 DUP (0)

                        Massiv2   db   10 DUP(0), 10 DUP (1)

                        Massiv3   db   3 DUP(0), 1,1

                        Massiv4   db    100 DUP(?)

                        Stroka      db   10 DUP(‘ ‘)

 

В сегменте данных наряду с директивами резервирования и инициализации данных могут использоваться псевдооператоры EQU и = (директивы определения идентификаторов). Их можно отнести к простейшим макросредствам ассемблера.

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

Синтаксис псевдооператора EQU  (equete -приравнивать).

            <имя>  EQU  <строка или числовое выражение>

Синтаксис псевдооператора =

            <имя> = <числовое выражение>

Отличия псевдооператоров:

1.   С помощью EQU имени  можно ставить в соответствие как числовые выражения, так и текстовые строки, а псевдооператор = может использоваться только с числовыми выражениями.

2.   Идентификаторы, определенные с помощью =, можно переопределять в тексте программы, а определенные с помощью EQU - нельзя.

Замечание. Чтобы строка воспринималась как текстовая, а не как выражение, ее необходимо заключить в угловые скобки <строка> . В режиме Ideal строка для EQU всегда трактуется как текстовая.

 

Size  equ  10

Ak     equ  ax  ; переименовали регистр

length = 50

time = 24

time = time-2

 

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

Например,                 adr1  db 10 dup (0)

                                    adr2  db  1

                                    dlina  adr2-adr1

 

  1. Дайте определения понятий «адрес» и «указатель» с точки зрения программы на ассемблере. Приведите примеры использования директив и команд работы с «адресами» и «указателями».

  1. Дайте определение понятия «стек». Перечислите команды работы со стеком. Опишите синтаксис каждой из команд и алгоритм ее работы. Приведите примеры использования команд работы со стеком.

Стек - это структура данных, которая используется для временного      хранения информации.  Программа может поместить данные в стек      (PUSH) или забрать их оттуда (POP). 

Алгоритм работы:

  • уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);

  • записать источник в вершину стека (адресуемую парой ss:esp/sp).

Состояние флагов после выполнения команды:

Применение: Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека. Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. Заметьте, что в отличие от команды pop в стек можно включать значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды. В микропроцессоре i8086 по этой команде записывалось скорректированное значение sp. При записи в стек 8-битных значений для них все равно выделяется слово или двойное слово (в зависимости от use16 или use32).

Алгоритм работы команды зависит от установленного атрибута размера адреса — use16 или use32:

  • загрузить в приемник содержимое вершины стека (адресуется парой ss:esp/sp);

  • увеличить содержимое esp/sp на 4 (2 байта) для use32 (соответственно для use16).

Состояние флагов после выполнения команды:

Применение: Команда применяется для восстановления содержимого вершины стека в регистр, ячейку памяти или сегментный регистр. Заметим, что недопустимо восстановление значения в сегментный регистр cs.

  1. Перечислите команды сложения и вычитания двоичных чисел. Опишите синтаксис каждой из команд и алгоритм ее работы. Приведите примеры сложения и вычитания двоичных чисел.

ADD

(ADDition)

Сложение

 

Схема команды: 

add приемник,источник 

Назначение: сложение двух операндов источник и приемник размерностью байт, слово или двойное слово.

Синтаксис Алгоритм работы:

  • сложить операнды источник и приемник;

  • записать результат сложения в приемник;

  • установить флаги.

Состояние флагов после выполнения команды:

Применение: Команда add используется для сложения двух целочисленных операндов. Результат сложения помещается по адресу первого операнда. Если результат сложения выходит за границы операнда приемник (возникает переполнение), то учесть эту ситуацию следует путем анализа флага cf и последующего возможного применения команды adc. Например, сложим значения в регистре ax и области памяти ch. При сложении следует учесть возможность переполнения.

Addition with Carry)

Сложение с переносом

 

Схема команды: 

adc приемник,источник 

Назначение: сложение двух операндов с учетом переноса из младшего разряда.

Синтаксис Алгоритм работы:

  • сложить два операнда;

  • поместить результат в первый операнд: приемник=приемник+источник;

  • в зависимости от результата установить флаги.

Состояние флагов после выполнения команды:

Применение: Команда adc используется при сложении длинных двоичных чисел. Ее можно использовать как самостоятельно, так и совместно с командой add. При совместном использовании команды adc с командой add сложение младших байтов/слов/двойных слов осуществляется командой add, а уже старшие байты/слова/двойные слова складываются командой adc, учитывающей переносы из младших разрядов в старшие. Таким образом, команда adc значительно расширяет диапазон значений складываемых чисел. В приложении 7 приведен пример программы сложения двоичных чисел произвольной размерности.

INC

(INCrement operand by 1)

Увеличить операнд на 1

 

Схема команды: 

inc операнд 

Назначение: увеличение значения операнда в памяти или регистре на 1.

Синтаксис Алгоритм работы: команда увеличивает операнд на единицу. Состояние флагов после выполнения команды:

Применение: Команда используется для увеличения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг cf.

SUB

(SUBtract)

Вычитание

 

Схема команды: 

sub операнд_1,операнд_2 

Назначение: целочисленное вычитание.

Синтаксис Алгоритм работы:

  • выполнить вычитание операнд_1=операнд_2-операнд_1;

  • установить флаги.

Состояние флагов после выполнения команды:

Применение: Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

м SBB

(SuBtract with Borrow)

Вычитание с заемом

 

Схема команды: 

sbb операнд_1,операнд_2 

Назначение: целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf).

Синтаксис Алгоритм работы:

  • выполнить сложение операнд_2=операнд_2+(cf);

  • выполнить вычитание операнд_1=операнд_1-операнд_2;

Состояние флагов после выполнения команды:

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

DEC

(DECrement operand by 1)

Уменьшение операнда на единицу

 

Схема команды: 

dec операнд 

Назначение: уменьшение значения операнда в памяти или регистре на 1.

Синтаксис Алгоритм работы: команда вычитает 1 из операнда. Состояние флагов после выполнения команды:

Применение: Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом заметьте то, что команда не воздействует на флаг cf.

См. также: урок 8 и команды inc, sub

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

IMUL

(Integer MULtiply)

Умножение целочисленное со знаком

 

Схема команды: 

imul множитель_1  imul множ_1,множ_2  imul рез-т,множ_1,множ_2

Назначение: операция умножения двух целочисленных двоичных значений со знаком.

Синтаксис Алгоритм работы: Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде, — байт, то второй сомножитель располагается в al;

  • если операнд, указанный в команде, — слово, то второй сомножитель располагается в ax;

  • если операнд, указанный в команде, — двойное слово, то второй сомножитель располагается в eax.

Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

Команды с двумя и тремя операндами однозначно определяют расположение результата и сомножителей следующим образом:

  • в команде с двумя операндами первый операнд определяет местоположение первого сомножителя. На его место впоследствии будет записан результат. Второй операнд определяет местоположение второго сомножителя;

  • в команде с тремя операндами первый операнд определяет местоположение результата, второй операнд — местоположение первого сомножителя, третий операнд может быть непосредственно заданным значением размером в байт, слово или двойное слово.

Состояние флагов после выполнения команды:

Команда imul устанавливает в ноль флаги of и cf, если размер результата соответствует регистру назначения. Если эти флаги отличны от нуля, то это означает, что результат слишком велик для отведенных ему регистром назначения рамок и необходимо указать больший по размеру регистр для успешного завершения данной операции умножения. Конкретными условиями сброса флагов of и cf в ноль являются следующие условия:

  • для однооперандной формы команды imul регистры ax/dx/edx являются знаковыми расширениями регистров al/ax/eax;

  • для двухоперандной формы команды imul для размещения результата умножения достаточно размерности указанных регистров назначения r16/r32;

  • то же для трехоперандной команды умножения.

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

MUL

(MULtiply)

Умножение целочисленное без учета знака

 

Схема команды: 

mul множитель_1 

Назначение: операция умножения двух целых чисел без учета знака.

Синтаксис Алгоритм работы: Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

  • если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

Состояние флагов после выполнения команды (если старшая половина результата нулевая):

Состояние флагов после выполнения команды (если старшая половина результата ненулевая):

Применение: Команда mul выполняет целочисленное умножение операндов без учета их знаковых разрядов. Для этой операции необходимо наличие двух операндов-сомножителей, размещение одного из которых фиксировано, а другого задается операндом в команде. Контролировать размер результата удобно используя флаги cf и of.

  1. Перечислите команды деления двоичных чисел. Опишите синтаксис каждой из команд и алгоритм ее работы. Приведите пример деления двоичных чисел.

DIV

(DIVide unsigned)

Деление беззнаковое

 

Схема команды: 

div делитель 

Назначение: выполнение операции деления двух двоичных беззнаковых значений.

Синтаксис Алгоритм работы: Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.

Состояние флагов после выполнения команды:

Применение: Команда выполняет целочисленное деление операндов с выдачей результата деления в виде частного и остатка от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.

IDIV

(Integer DIVide)

Деление целочисленное со знаком

 

Схема команды: 

idiv делитель 

Назначение: операция деления двух двоичных значений со знаком.

Синтаксис Алгоритм работы: Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде:

  • если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

  • если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

  • если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;

Остаток всегда имеет знак делимого. Знак частного зависит от состояния знаковых битов (старших разрядов) делимого и делителя. Состояние флагов после выполнения команды:

Применение: Команда выполняет целочисленное деление операндов с учетом их знаковых разрядов. Результатом деления являются частное и остаток от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.

  1. Команда сравнения двух операндов. Опишите синтаксис и алгоритм ее работы.

CMP

(CoMPare operands)

Сравнение операндов

 

Схема команды: 

cmp операнд1,операнд2 

Назначение: сравнение двух операндов.

Синтаксис Алгоритм работы:

  • выполнить вычитание (операнд1-операнд2);

  • в зависимости от результата установить флаги, операнд1 и операнд2 не изменять (то есть результат не запоминать).

Состояние флагов после выполнения команды:

Применение: Данная команда используется для сравнения двух операндов методом вычитания, при этом операнды не изменяются. По результатам выполнения команды устанавливаются флаги. Команда cmp применяется с командами условного перехода и командой установки байта по значению setcc.

  1. Перечислите команды преобразования типа, опишите синтаксис каждой из команд и алгоритм ее работы. Приведите примеры использования команд преобразования типа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]