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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


Лекции Лекция по программированию

Информация:

Тип работы: Лекции. Добавлен: 04.09.2012. Сдан: 2011. Страниц: 21. Уникальность по antiplagiat.ru: < 30%

Описание (план):


Лекция  (1,2,3). Введение. Цели и задачи дисциплины. Программная модель микропроцессора INTEL 8080, регистры, форматы и системы команд, методы адресации
    Язык  ассемблера - это один из самых старых из всех существующих языков программирования. Когда-то это был один из основных языков программирования, без знания которого нельзя было заставить компьютер сделать что-либо полезное. Появились более удобные средства общения с компьютером. Но в отличии от других языков ассемблер не умирал, более того он это не смог сделать в принципе.
    Таким образом язык ассемблера - это символическое  представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами(инструкциями) машинного языка. Несмотря на общее название язык ассемблера для каждого типа компьютера свой. Это касается и внешнего вида программ и идей, отражением которых этот язык является. Но решать проблемы связанные с аппаратурой невозможно без знания ассемблера. Программист или любой другой пользователь может использовать любые высокоуровневые средства, вплоть до построения виртуальных миров, и возможно даже не подозревать, что на самом деле компьютер выполняет команды языка, на котором написана программа, а их трансформация представление в форме скучной и унылой последовательности совсем другого языка - машинного. Поэтому не случайно все языки имеют средства связи с языком ассемблера, т.к. решить аппаратные проблемы невозможно без знания языка.
    Поэтому изучение языка ассемблер - мы начнем с изучения архитектуры ЭВМ. Это понятие характеризует ЭВМ с точки зрения его функциональных программно-управляемых свойств. Выясним какая часть ЭВМ является видимой и доступной для программирования на этом языке. На языках высокого уровня этого знать не обязательно.
    Архитектура ЭВМ - это абстрактное представление ЭВМ, которое отражает ее структурную, схематичную и логическую организацию. Это понятие включает в себя следующее:
    Структурную схему ЭВМ
    Средства и способы доступа к элементам структурной схемы ЭВМ
    Организация и разрядность ЭВМ
    Набор и доступность регистров
    Организацию и способы адресации памяти
    Способы представления и форматы данных ЭВМ
    Набор машинных команд ЭВМ
    Форматы машинных команд
    Обработку нештатных команд
    Любая выполняющаяся  программа получает в свое распоряжение определенный набор ресурсов микропроцессора.  Эти ресурсы необходимы для выполнения и хранения в памяти команд программы, данных и информации о текущем состоянии программы и микропроцессора. Набор этих ресурсов представляет собой программную модель микропроцессора, которая представлена на схеме.
    Программные модели более ранних микропроцессоров (I486, Pentium) отличаются меньшим размером адресуемого пространства оперативной памяти (2 32 -1), т.к разрядность их шины составляет 32 бита и отсутствием некоторых регистров. На данной схеме в скобках обозначено, начиная с какой модели данная группа регистров появилась в программной модели микропроцессоров Intel. Если обозначения не, то данная группа регистров присутствовала в более ранних моделях (i386).
    
    
 Программная модель Intel (Pentium III)

Регистры - это  память микропроцессоров. Программную модель микропроцессора Intel составляют:
    Пространство адресуемой памяти (для Pentium III- 2 36- 1 байт)
    Набор регистров для хранения данных общего назначения
    Набор сегментных регистров
    Набор регистров состояния и управления
    Набор регистров вычислений с плавающей точкой
    Набор    регистров    целочисленного    ММХ-    расширения,    отображенных    на    регистры сопроцессоров
    Набор регистров ММХ- расширения с плавающей точкой
    Программный стек
Регистры  общего назначения.
    Данный  тип регистров используется для  хранения.
    И состоят из четырех регистров  данных и четырех регистров индексов и указателей., еах (ax/ah/al) -аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование данного регистра обязательно, иногда использование его неявно, ebx (bx/bh/bl) - базовый регистр. Используется для хранения базового адреса некоторого объекта в памяти.
    есх    (cx/ch/cl)    -   регистр-счетчик. Применяется в  командах, производящих    некоторые повторяющиеся действия. Например в команде организации цикла. edx(dx/dh/dl) - регистр данных. Используется для хранения данных. Регистры указателей и индексов. Их 4 штуки.
    esi (si) - индекс источника. Этот регистр используется в цепочных операциях содержит текущий адрес элемента в цепочке-источнике.
    edi(di) -индекс приемника(получателя). Этот регистр в цепочных операциях содержит текущий адрес в цепочке- приемнике.
    В архитектуре микропроцессора на программно-аппаратном уровне поддерживается такая структура данных, как стек. В дальнейшим мы подробнее рассмотрим эту область памяти и работу с ней.
    Для работы со стеком используются следующие  регистры.
    esp (sp) - регистр указателя стека. Содержит указатель на вершину стека в текущем сегменте стека.
    ebp(bp) - регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека
Сегментные  регистры
МП аппаратно  поддерживает структурную организацию  программы в виде трех частей, называемых сегментами Такая организация памяти называется сегментной. Их существование обусловлено спецификой организации и использования оперативной памяти МП Intel. МП аппаратно поддерживает две модели использования оперативной памяти, где оперативная память ( или оперативное запоминающее устройство) - это физическая память, к которой МП имеет доступ по шине адреса.
    Сегментированная модель. В этой модели программе выделяются непрерывные области памяти (сегменты), а сама программа может обращаться только к данным, которые находятся в этих сегментах.
    Страничная модель. Ее можно рассматривать как надстройку над сегментированной моделью  памяти.  В  случае  использования  этой  модели  памяти  оперативная  память рассматривается как совокупность блоков фиксированного размера (4 Кбайта). Основное применение этой модели связано с организацией виртуальной памяти, что позволяет операционной системе использовать для программ пространство памяти большее, чем объем физической памяти. Для МП i486 и Pentium размер возможной виртуальной памяти может достигать 4Тбайт.
Таким образом, Сегментация это механизм адресации, обеспечивающий существование нескольких независимых адресных пространств, как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния. В основе механизма сегментации лежит понятие сегмент, который представляет собой независимый поддерживаемый на аппаратном уровне блок памяти.
Каждая  программа может состоять из любого количества сегментов (в зависимости  от организации модели памяти), но реально имеется доступ к трем основным сегментам памяти сегмент кода, сегмент данных, сегмент стека. Программа никогда не знает, по каким физическим адресам размещены ее сегменты. Этим занимается ОС. ОС размещает сегменты программы по определенным физическим адресам, после чего помещает значения этих адресов в определенные места. Куда именно поместит сегменты программы ОС зависит от работы МП. Так, в реальном режиме эти адреса помещаются непосредственно в соответствующие сегментные регистры, а в защищенном режиме они размещаются в элементы специальной системной дескрипторной таблице. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Это относительный адрес или смещение, который МП использует для доступа к данным внутри сегмента, называется эффективным. Различают три основных модели сегментированной организации памяти.
    сегментированная модель памяти реального режима
    сегментированная модель памяти защищенного режима
    сплошная модель памяти защищенного режима.
Рассмотрим  порядок формирования физического  адреса в реальном режиме.
    Физический  адресэто адрес памяти, выдаваемый на шину адреса микропроцессора. Другое название физического адреса - линейный адрес. 

    Сегментированная модель памяти реального режима.
 

    
В реальном режиме механизм адресации физической памяти имеет следующие характеристики:
    диапазон изменения физического адреса от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий.
    максимальный размер сегмента 64 Кбайта. Это объясняется 16-разрядной архитектурой I8086. Нетрудно подсчитать, что максимальное   значение, которое могут содержать 16- разрядные регистры, составляют 216-1, что применительно к памяти и определяет величину 64 Кбайт.
    для обращения к конкретному физическому адресу оперативной памяти необходимо определить  адрес  начала  сегмента  (сегментную  составляющую)  и  смещение  внутри сегмента.   В сегментном регистре находятся только старшие 16 бит физического адреса начала сегмента.  недостающие 4 бита 20-битового адреса получаются путем сдвига значения в сегментном регистре влево на 4 разряда.  Получение 20-битового адреса выполняется   аппаратно   и   для   программного   обеспечения   абсолютно   прозрачна. Полученный адрес соответствует адресу начала сегмента.  Вторая составляющая адреса - смещение,   которое   представляет   собой   16-битовое   значение.   Это   значение   может присутствовать  в   команде   в  явном  или  косвенном  виде.   В  результате   получается следующим образом физический адрес
    физический  адрес= смещение+24*(регистр сегмента)
таким образом мы получаем доступ к 1 Мбайту памяти. Получение адреса путем сложения происходит на аппаратном уровне и  опять же прозрачно для программного обеспечения. Получение смещения зависит от способа адресации, используемой в команде. Недостатками такой организации памяти являются:
      сегменты бесконтрольно размещаются с любого адреса, кратного 16 (т.к. 
      содержимое сегментного регистра аппаратно смещается на 4 разряда). В результате 
      чего, программа может обращаться по любым адресам, в том числе и реально не 
      существующим.

      сегменты имеют максимальный размер 64 Кбайт
      сегменты могут перекрываться с другими сегментами.
    Для устранения этих недостатков и было введено сегментирование памяти в защищенном
    режиме.
    Мы  рассмотрели понятие сегментация  и теперь определим сегментные регистры, которые
    используются  для доступа к соответствующему   сегменту шесть основных сегментных
    регистров: cs, ss, ds, es, gs, fs.
      Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) - сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ МП.
      Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (date segment register). - сегментный регистр данных, который хранит адрес сегмента данных текущей программы.
      Сегмент стека.  Этот сегмент представляет собой область памяти,  называемую стеком. Для доступа к этому сегменту служит регистр ss (stack segment register).
      Дополнительный сегмент данных. Неявно алгоритмы выполнения машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находятся в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных es, gs,fs.
            Регистры  состояния и управления
    В МП включены несколько регистров, которые содержат информацию о состоянии как самого МП, так и программы, команды которой в данный момент загружены на конвейер.
    регистр флагов eflsgs/flags
    регистр указателя команды eip/ip
Используя эти  регистры,  можно  получить  информацию  о результатах выполнения  команд программы и влиять на состояние самого МП. Регистр флагов - регистр разрядностью 32-16 бит..
31 ... 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 ... ГО VIP VIF АС VM RF 0 NT IOPL OF SF SF SF SF ZF 0 AF 0 PF 1 CF
    Рассмотрим    некоторые    наиболее    часто    используемые    в    программах    любого    языка
    программирования  флаги.
    Все флаги можно разделить на три  группы:
      8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд, 
      таких как арифметические операции (сложение, вычитание и т.д.), операции сравнения и 
      т.д. После формирования регистра флагов, их можно использовать для анализа результата и 
      изменения хода выполнения программы в зависимости от полученного результата.

    1 флаг управления (df), который используется цепочными командами (работа со строками).
      5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом i8086. Не рекомендуется прикладным программам модифицировать без необходимости эти флаги, т.к. в большинстве случаев это приводит к прерываниям работы программы.
 
мнем  оника флага флаг номер бита
      содержание  и назначение
1. cf флаг переноса 0 1-арифметическая  операция произвела перенос из  старшего бита результата. Старшим  является 7-й, 15-й или 31-й бит в зависимости от размерности операнда. 0 - переноса нет
2. pf флаг паритета 2 1-8 младших разрядов результата содержат четное число единиц 0-8 младших разрядов результата содержат нечетное число единиц.
3. af вспомогательный флаг переноса 4 Используется   для   команд,   работающих   с   BCD-числами. Фиксирует факт заема из младшей тетрады результата. 1-   в     результате     операции     сложения     был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей   тетрады   из   значения   в   старшей тетраде. 2-   0 - переносов и заемов не было.
4. zf флаг нуля 6 1-результат  нулевой 0- результат не нулевой
5. sf флаг знака 7 Отражает состояние  старшего бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов, соответственно) 1-старший бит результата равен 1 0 - старший бит результата равен 0
6. of флаг переполнения
11 флаг of используется для фиксирования факта потери значащего бита при арифметических операциях 1-  в результате  операции  происходит  перенос (заем) в (из) старшего, знакового бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов, соответственно) 0-в результате операции не происходит переноса (заема) в (из) старшего, знакового бита результата.
    Указатель команд — это регистр eip/ip. В этом регистре всегда находится адрес команды, которая должна быть выполнена следующей. Более точно, в этом регистре находится адрес той команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой cs и ip. Менять содержимое данного регистра можно только командами перехода.
Структура программы на ассемблере.
Программист или любой другой пользователь может  использовать любые высокоуровневые  средства, вплоть до построения виртуальных миров, и возможно даже не подозревать, что на самом деле компьютер выполняет команды языка, на котором написана программа, а их трансформация представление в форме скучной и унылой последовательности совсем другого языка - машинного. Поэтому не случайно все языки имеют средства связи с языком ассемблера, т.к. решить аппаратные проблемы невозможно без знания языка. Поэтому решать проблемы связанные с аппаратурой невозможно без знания ассемблера.
    Вспомним, что ассемблер является символичным аналогом машинного языка, поэтому он относится к машинно-зависимым языкам. Поэтому программа написанная на ассемблере, должна отражать все особенности архитектуры МП: организацию памяти, способы адресации операндов, правила использования регистров и т.д. Из-за необходимости учета подобных особенностей ассемблер уникален для каждого типа МП.
    Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами  памяти.  Программа может  состоять  из  одного  или  нескольких  таких  блоков- сегментов. Каждый сегмент содержит совокупность предложений языка, каждое из которых занимает отдельную строку кода программы.
    Предложения ассемблера бывают четырех типов:
      о   команды,    или   инструкции,    представляющие    собой    символические    аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды МП о   макрокоманды   -   оформляемые   определенным   образом   предложения   текста
        программы, замещаемые во время трансляции другими предложениями. о   директивы,   являющиеся   указанием   транслятору   ассемблера   на   выполнения некоторых действий. У директив нет аналогов в машинном представлении о   строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита.
    Комментарии игнорируются транслятором. Рассмотрим формат команды ассемблера: [Метка:] Мнемокод [операнд] [;комментарий]
    Обязательным  здесь является только мнемокод. В  зависимости от команды может  не быть операндов, может быть один или два операнда.
    Метка - служит для присвоения имени команде. На эту метку можно будет ссылаться из любой части программы. Она может содержать до 31 символа и заканчиваться двоеточием и содержать символы алфавита от a до Z. и от a до z, цифры от 0 до 9 и символы ?, ., @,, _, $. Метка не должна начинаться с цифры. Если используется «.», то она должна быть первым символом метки. Имя метки не должно совпадать с названием команд. В метку не должны вставляться пробелы.
    Комментарии должны быть отделены от команд ;.  Это комментарии к команде, программе и блоку команд.
    Мнемокод  - это имя команды МП.
    Поле  операндов  в поле операндов может быть0, 1 или 2 операнда в зависимости от типа команды.      Операнд   -   часть   команды,   макрокоманды   или   директивы   ассемблера, обозначающие объекты,  над которыми производятся действия.  Операнды ассемблера описываются   выражениями   с   числовыми   и   текстовыми   константами,   метками   и идентификаторами      переменных   с   использованием   знаков   операций   и   некоторых зарезервированных слов.
    Если  в команде 2 операнда, то первый операнд  называется приемником, а второй источником.
    Например:
    MOV AX, CX ; содержимое регистра cx перемещается в ax
    Для работы с данными их помещают в  сегмент данных.
Описание  сегмента данных осуществляется с помощью директивы DATA - начало сегмента данных   данные  .CODE
Классификация операндов.
    1- Постоянные и непосредственные операнды- число, строка, имя или выражение, имеющие некоторое фиксированное значение.
    MOV ax,5
    2- Адресные операнды- задают физическое расположение   операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения .
MOV AX,0000H
MOV DS,AX
MOV AX,DS:0000H ; адресный операнд
    3- Перемещаемые операнды — любые символьные имена, представляющие некотрые адреса памяти.
.data
adb10
.code
lea si,a; a - перемещаемый операнд
    4- Счетчик адреса — специфический вид операнда. Он обозначается $. Когда транслятор ассемблера встречает $ в исходной программе этот символ то подставляет вместо него текущее значение счетчика адреса. Значение счетчика адреса, или как его иногда называют счетчика   размещения,   представляет   собой   смещение   текущей   машинной   команды относительно начала сегмента кода.
Jmp $+3 ; переход на mov
cld
mov al,1
    Регистровый операнд — это просто имя регистра.
    Базовый и индексный операнды — используется для косвенной адресации
    Структурные операнды - используется для доступа к конкретному элементу сложного типа данных, называемых структурой.
    Записи  — используется для доступа к битовому полю некоторой записи.
Объявив данные нужно уметь обращаться к  ним. Существует множество способов доступа к ним. Сами операнды могут находится в регистрах, в самих командах, в памяти или портах в/в Рассмотрим 7 основных режимов адресации
    Регистровая адресация
    Непосредственная адресация
    Прямая адресация
    Косвенная регистровая адресация
    Адресация по базе
    Прямая адресация с индексированием
    Адресация по базе с индексированием
МП по формату записи операнда определяет тип адресации 

    Режимы  адресации
    Формат  операнда
    Регистр сегмента
Регистровый регистр (кроме  ip) Не используется
Непосредственный данные Не используется
Прямой сдвиг метка DS DS
Косвенный регистровый [BX] [BP] [DI] [SI] DS SS DS DS
По  базе [BX]+сдвиг [BP]+ сдвиг DS CS
Прямой  индексированием [DI]+сдвиг [SI]+сдвиг DS DS
По  базе с индексированием [D[][SI]+сдвиг [BX][SI]+сдвиг [BP][SI]+сдвиг [BP][DI]+сдвиг DS DS SS SS
                Адресация
    Для получения данных рассмотрим подробнее  все виды адресации
    1- Регистровая и непосредственная адресация.
    При регистровой адресации МП извлекает операнд из регистра(или загружает его в регистр). MOV AX,CX
    Непосредственная   адресация   позволяет  Вам  указывать   8-   или   16-битовое   значение константы в качестве операнда-источника. Эта константа содержится в команде., а не в регистре или в ячейке памяти.. MOV CX,500
    При таком способе адресации необходимо помнить о диапазоне чисел, соответствующих 8-или 16-битовых значений.
    Ассемблер всегда расширяет знак при пересылке  непосредственных значений в операнд-приемник.
    2-  Прямая адресация.
    При прямой адресации исполнительный адрес  является составной частью команды. Обычно прямая адресация применяется, если операндом служит метка.
MOV AX, TABLE
Существует абсолютная и относительная прямая адресация.
      Относительная прямая адресация. Используется в командах перехода
      Абсолютная прямая адресация. В этом случае эффективный адрсе является 
      частью машинной команды, но формируется этот адрсе только из значения 
      поля смещения в команде.

            3-  Косвенная регистровая
При косвенной  регистровой адресации исполнительный адрес операнда содержится в базовом регистре BX, в регистре указателя BP или индексном регистре (SI или DI) Косвенные регистровые операнды надо заключать в квадратные скобки, чтобы отличить их от регистровых операндов. MOVAX,[BX]
Для загрузки адреса в BX используется операция OFFSET(смещение) к адресу ячейки
памяти.
MOV BX, OFFSET TABLE
MOVAX,[BX]
            4- Адресация по базе.
При адресации  по базе Ассемблер вычисляет исполнительный адрес с помощью сложения значения сдвига с содержимым регистров BXи BP.
Регистр BX удобно использовать при доступе к структурированным записям данных, расположенным в разных областях памяти. В этом случае базовый адрес помещается в базовый регистр BX и доступ к ее отдельным элементам осуществляется по их сдвигу относительно базы. MOVAX,[BX]+4 MOV AX,4[BP] MOVAX,[BP+4]
          5- Прямая адресация с индексированием.
При прямой адресации  с индексированием исполнительный адрес вычисляется как сумма
значений сдвига и индексного регистра (DI или SI). Этот тип адресации удобен для доступа
к элементам таблицы, когда сдвиг указывает на начало таблицы, а индексный элемент к
элементам таблицы, когда сдвиг указывает на начало таблицы, а индексный регистр - на ее
элемент.
MOV DI,2
MOV AL,B_TABLE[DI]
Загрузится 3-й  элемент таблицы.
          6- Адресация по базе с индексированием
При адресации  по базе с индексированием исполнительный адрес вычисляется как сумма
значений базового регистра, индексного регистра и, возможно, сдвига.
В этом режиме адресации  складывается два отдельных смещения, то он удобен при
адресации двумерных массивов, когда базовый регистр содержит начальный адрес массива,
а значение сдвига и индексного регистра суть смещения по строке и столбцу.
MOV AX,SMECH[BX][DI]
Начальный адрес  в BX, в DI сдвиг блока(номер строки), а SMECH - сдвиг
Примеры:
MOVAX,[BX+2+DI]
MOVAX,[DI+BX+2}
MOVAX,[BX+2][DI]
MOVAX,[BX][DI+2]
Псевдооператор  определения сегмента
Для работы с данными необходимо уметь определять сегменты и данные в них. Пример определения сегмента данных:
DATASEG SEGMENT PARA PUBLIC DATA
ADB?
В DB 10,20,30,40
CDW
DATASEG ENDS
где DATASEG - имя сегмента данных или адрес начала сегмента данных
SEGMENT - псевдооператор определения сегмента
Формат  псеводооператора следующий
имя_сег  SEGMENT [тип подгонки] [тип_связи] ['класс'] [ тип размера памяти]
имя_сег  ENDS
[тип  подгонки] - сообщает компоновщику о том, что нужно обеспечить размещение начала сегмента на заданной границе. Это важно, т.к. при правильном выравнивании доступ к данным в процессорах i80x86 выполняется быстрее. Допустимы следующие значения:
    BYTE - выравнивание не выполняется. Сегмент может начинаться с любого адреса памяти.
    WORD - сегмент начинается  по  адресу,  кратному двум,  т.е.  последний (младший) значащий бит физического адреса равен 0 (выравнивание на границу слова)
    DWORD - сегмент начинается по адресу, кратному четырем, то есть два последних (младших) значащих бита равным 0 (выравнивание на границу двойного слова)
    PARA - сегмент начинается по адресу кратному 16, т.е. последняя шестнадцатеричная цифра адреса должна быть 0h (выравнивание на границу параграфа)
    PAGE    -    сегмент    начинается    по    адресу,    кратному    256,    т.е.    две    последние шестнадцатеричные цифры должны быть 00h (выравнивание на границу странице 256 байт)
    MEMPAGE  -  сегмент начинается  по  адресу,   кратному  4Кбайт,  т.е.   три  последние шестнадцатеричные  цифры  должны  быть  000h  (адрес следующей страницы  памяти размером 4Кбайт).
[тип_связи] (Атрибут комбинирования  сегментов) - сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя. По умолчанию атрибут комбинирования сегмента принимает значение PRIVATE. Значения атрибутов могут быть:
    PRIVATE - сегмент не будет объединяться с другими сегментами же именем вне данного модуля.
    PUBLIC - заставляет компоновщик соединить все сегменты с одинаковым именем. Новый объединенный сегмент будет целым и непрерывным. Все   адреса (смещения) объектов, а это могут быть, в зависимости от типа сегмента, команды или данные, будут вычисляться относительно начала этого нового сегмента.
    COMMON - располагает все сегменты с одним и тем же именем по одному адресу. Размер полученного в результате сегмента будет равен размер самого большого сегмента.
    AT xxxx - располагает сегмент по абсолютному адресу параграфа (параграф   - объем памяти,  кратный  16;  поэтому последняя цифра адреса равна 0).  Абсолютный адрес параграфа задается выражением xxx.
    STACK   -   определение   сегмента   стека.    Заставляет   компоновщик   соединять   все одноименные сегменты и вычислять адреса в этих сегментах относительно регистра ss. Регистр sp устанавливается на конец объединенного сегмента стека. Если сегмент стека создан, а комбинированный тип  STACK не используется, программист должен явно загрузить в регистр ss адрес сегмента (подобно регистру ds)
['класс'] - это заключенная в кавычки строка, помогающая компоновщику определить соответствующий порядок следования сегментов при сборке программы из сегментов нескольких модулей. Компоновщик объединяет вместе в памяти все сегменты с одним и тем же именем класса.
[ тип размера памяти] - Для процессоров i80386 и выше сегменты могут быть 16- или 32-разрядными. Это влияет прежде всего на размер сегмента и порядок формирования физического адреса.
    USE 16 - это означает, что сегмент допускает 16 разрядную адресацию.   (Такой сегмент может содержать до 64Кбайт кода или данных)
    USE32 - сегмент будет 32 разрядным. При формировании физического адреса может использоваться  32-разрядное смещение.  Поэтому такой сегмент может содержать до 4Гбайт кода или данных.
Существуют упрощенные директивы определения сегмента.
.CODE [ИМЯ] - начало сегмента кода
.DATA - начало сегмента данных
.CONST - начало и продолжение сегмента постоянных данных.
.DATA? - начало и продолжение сегмента неинициализированных данных.
.STACK - начало и продолжение сегмента стека модуля
Псевдооператоры DB, DW, DD
DB - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует один или несколько байт.
Формат:
[имя] DB выражение[,…]
DW - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует двухбайтовые слова.
Формат:
[имя] DW выражение[,…]
DD - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует четырехбайтовые слова.
Формат:
[имя] DD выражение[,…]
DF - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует шестибайтовые слова.
Формат:
[имя] DF выражение[,…]
DP - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует шестибайтовые слова.
Формат:
[имя] DP выражение[,…]
DQ - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует восьмибайтовые слова.
Формат:
[имя] DQ выражение[,…]
DT - определяет переменную или присваивает ячейке памяти начальное значение. Резервирует десятибайтовые слова.
Формат:
[имя] DT выражение[,…]
Пример:
    .DATA
ADB 10
В DB 10 DUP (?)
С DB 4 DUP (0)
DDW?
.CODE
MOV @AX, @DATA
MOVDS,AX
MOV AX, OFFSET A
            Лекция 4. Команды пересылки данных
Эти команды  осуществляют обмен данными и  адресами между регистрами и ячейками памяти или портами ввода-вывода.
К этой группе относятся следующие команды:
MOV<операнд-приемник>,<операнд-источник>
Существуют  ограничения на использования данной команды:
    Нельзя осуществлять пересылку из одной области памяти в другую. Если возникает такая необходимость,   то   нужно   использовать   в   качестве   промежуточного   буфера  любой доступный в данный момент регистр общего назначения нельзя загрузить в сегментный регистр значение непосредственно из памяти..
    нельзя  пересылать  содержимое  одного регистра в  другой  сегментный регистр.   Это объясняется тем, что в системе команд нет соответствующего кода операции. Выполнить такую операцию можно  через регистр общего  назначения, mov ax,ds
    mov es,ax
    • нельзя использовать сегментный регистр cs в качестве операнда-приемника. Это объясняется тем, что в паре регистров cs:ip всегда содержится адрес команды, которая должна выполняться следующей. Изменение данного регистра означает фактически операцию перехода, а не команду пересылки.
      Для организации работы со стеком используются следующие команды.
Стек - память организованная по принципу «первым  пришел последним ушел». Чаще всего  стек используется при вызовах процедуры при использовании команды CALL. В этом случае адрес возврата, который извлекается после выполнения процедуры.
Стек  имеет следующую структуру. Адрес  стека находится в указателе  стека sp.  Адрес, который содержится в sp называется вершиной стека. Стек «растет» по направлению к младшим адресам (к ячейке 0), т.е. первое слово помещенное в стек имеет наибольший адрес, следующее на 2 байта ниже. Если нам необходимо получить доступ к элементам не на вершине, а внутри стека, то в этом случае необходимо использовать регистр ebp- это регистр указателя базы кадра стека, где можно записать необходимый адрес стека.
PUSH источник - запись значения источника в вершину стека. В этом случае если необходимо сохранить необходимый адрес
POP приемник  -     запись  значения  из  вершины стека по  месту,  указанному  операндом приемником. Значение при этом «снимается» с вершины стека.
PUSHA и PUSHA W- команда групповой записи в стек. По этой команде в стек последовательно записываются регистры ax, cx, dx, bx, sp, bp, si, di. Разница этих двуух команд в разрядности используемых регистров (16 или 32 разрядных регистров)
POPA, POPAW— групповое извлечение из стека, обратная предыдущим операция.
PUSH- сохранения регистров флагов в стеке.
PUSHFW- сохраняет в стеке регистр флагов flags или eflags
POPF и POPFW— обратная предыдущим операция извлечения регистра флагов из стека.
Команда обмена XCHG
Двунаправленная пересылка данных. Команда меняет между собой значения двух регистров  или регистра и ячейки памяти. XCHG ax,bx XCHG al,bl
Работа  с адресами и указателями
lea приемник, источник - загрузка исполнительного адреса. удобна для работы со строками.
В   отличие   от   команды   mov   с   операцией       OFFSET   операнд   источник   может   быть индексированным.
Например,
mov di, 5
lea bx, tab[di]
lds приемник, источник -    регистр указателя в регистр сегмента данных ds. Это загрузка указателя и регистра сегмента данных( загрузка указателя с использованием регистра ds)
Например,
h fddhere
lds bx, h_f
аналогично операции
mov bx, offset h_f
movax,seg here
mov ds, ax
где SEG - операция, которая возвращает номер блока адреса переменной.
В этой операции исключается использование дополнительного  третьего регистра.
les приемник, источник -загрузка указателя в регистр дополнительного сегмента данных es/ lgs приемник, источник загрузка указателя в регистр дополнительного сегмента данных gs. lfs приемник, источник - . загрузка указателя в регистр дополнительного сегмента данных fs. lss приемник, источник - . загрузка указателя в регистр сегмента стека ss.
Команда Lea похожа на команду mov тем, что также производит пересылку. Однако эта команда производит пересылку не данных, а эффективного адреса (т.е. смещения данных относительно начала сегмента данных) в регистр, указанный операндом назначения.
Команды ввода-вывода в порт
В этом случае ввод-вывод  осуществляется на уровне BIOS напрямую с оборудованием. in аккумулятор, порт out порт, аккумулятор
где аккумулятор - регистр al при обмене байтами или регистр ax при обмене словами.
порт десятичное значение от 0 до 256
    В качестве операнда «порт» можно использовать регистр dx.
Лекция 5. Арифметические команды.
Арифметические  команды работают с двумя типами чисел:
      целыми двоичными числами. Они могут быть знаковыми и беззнаковыми
      целыми десятичными числами.
Целые двоичные числа  - это число, закодированное в двоичной системе счисления. Размерность может составлять 8, 16 и 32 бита. Знак целого числа определяется тем, как интерпретируется старший бит в представлении числа. Среди арифметических команд есть только две команды, которые учитывают старший бит, это imul и idiv/ В остальных случаях сам программист должен следить за старшим битом. Диапазон значений двоичных чисел:
    для беззнаковых чисел: для 8-битовых - от 0 до 255, для 16-битовых - от 0 до 65536
    для знаковых чисел: для 8-битовых чисел - от -128 до 127, для 16-битовых - от -32768 до 
    32767

Формат двоичных чисел: числоb (01001100b)
Например:
mov ax, 01001ЮОЪ
addax,01001b
Десятичные  числа:
    Десятичные  числа - специализированный вид представления  числовой информации, в основу которого положен принцип кодирования каждой десятичной цифры числа группой из четырех бит. При этом каждый байт числа содержит одну или две десятичные цифры в так называемом двоично-десятичном коде (BCD - Binary-Coded Decimal). Например:
    

    00
    01
    10 
    3 - 11

 
    100
    101
    110
    111
    1000
    1001
Десятичные  числа могут представляться в  двух форматах и заканчиваются буквой D:
    упакованном формате - каждый байт содержит две десятичные цифры.
    неупакованный формат- каждый байт содержит одну десятичную цифру в четырех младших битах. Старшие четыре бита имеют нулевое значение. Это так называемая зона. Диапазон представления десятичного неупакованного числа в одном байте от 0 до 9.
Хотя  мы в данном случае и говорим о  десятичных числах для МП - это двоичные числа. Поэтому при работе с десятичными числами, если вы забываете о внутреннем представлении чисел и не учитываете это при вычислениях, могут возникать ошибки. Поэтому данные, если они десятичные то необходимо скорректировать с помощью специальных команд. Шестнадцатеричные цифры от 0 до F и заканчиваются буквой H.
Литерал - строка букв, цифр, символов заключенных в кавычки или апострофы.
Команды сложения
    ADD приемник, источник - сложить два операнда, приемник = приемник +источник При сложении используется флаг CF.
Для получения  точного результата используется команда  ADC, которая учитывает флаг переноса.
ADC приемник, источник сложить с переносом.
результат следующий
приемник= приемник + источник + значение CF
При выполнении команды сложения устанавливаются  следующие флаги:
    CF=1 , если результат не помещается в приемнике, т.е. произойдет перенос.
    PF=1; если результат имеет четное число битов с 1
    AF=1, если результат сложения десятичных чисел требует коррекции
    ZF=1, если результат =0
    SF= 1, если результат отрицателен.
    OF=1, если при сложении 2-х чисел одного знака результат превышает диапазон допустимых значений в обратном коде, а сам приемником меняет знак SF и OF имеют смысл при сложении чисел со знаком, AF - для десятичных чисел.
Команды вычитания.
Как таковой  команды вычитания в МП не существует, это команда сложения двух чисел, одно их которых в дополнительном коде. SUB - вычесть SBB - вычесть с заемом. Формат команды следующий:
SUB приемник, источник приемник= приемник- источник SBB приемник, источник
приемник = приемник - источник- заем (флаг CF) Нельзя вычитать содержимое одной ячейки из другой. Устанавливаются флаги:
    CF=1, если требуется заем.
    PF=1, если результат имеет четное число битов со значением 1
    AF=1, если результат вычитания десятичных чисел требует коррекции.
    ZF=1, результат =0
    SF=1 , результат отрицательный
    OF= 1, если при вычитании чисел, имеющих разные знаки, результат превышает диапазон значений приемника в обратном коде.
Коррекция результат  вычитания 2-х десятичных чисел, как  и сложения выполняется командами  AAS и DAS. AAS - преобразует содержимое регистра AL в правильную неупакованную десятичную цифру.
DEC приемник
    Это команда уменьшения приемника (регистра общего назначения или ячейки памяти) на 1.
Команды умножения.
Для умножения  чисел без знака предназначена  команда
MUL источник
Для умножения  чисел со знаком предназначена команда
IMUL источник
где источник - регистр   общего назначения или  ячейка памяти размером в байт или  слово. В качестве второго операнда команды MUL и IMUL используют содержимое регистра AL (при операциях над байтами) или регистра AX (при операциях над словами). Произведение имеет двойной размер и возвращается следующим образом:
Умножение байтов возвращение 16-битовое   произведение в регистрах AH (старший байт) и AX (младший байт).
Умножение слов возвращает 32-битовое произведение в регистрах DX(старшее слово) и AX (младшее слово) По завершении исполнения этих команд флаги переноса CF и переполнения OF показывают, какая часть произведения существенна для операций.
После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины. В противном случае они равны 1.
Команда деления
Команда DIV выполняет деление чисел без знака
DIV источник
Команда IDIV выполняет деление чисел со знаком
IDIV источник
где источник - делитель размером в байт или слово, находящееся  в регистре общего назначения или  ячейки памяти. Делимое должно иметь  двойной размер; оно извлекается  из регистров AH и AL (при делении на 8-битовое число) или из регистров DX и AX (при делении на 16-битвое число). Результаты возвращаются следующим образом: Если операнд-источник представляет собой байт, то частное возвращается в регистре AL, а остаток в регистре AH. Если операнд-источник представляет собой слово, то частное возвращается в регистре AX, а остаток - в регистре DX.
Обе команды  оставляют состояние флагов неопределенными, но если частное не помещается в  регистре - приемнике (AL или AX), то МП сообщает об этот как «Прерывание типа 0 (деление на 0).
Переполнение  результата деления возникает в  следующих случаях:
    Делитель равен 0
    При делении байтов без знака   делимое без знака делимое пол меньшей мере в 256 раз превышает делитель.
    При слов без знака делимое по меньшей мере в 65 536 раз превышает делитель.
    При делении байтов со знаком частное лежит вне диапазона от -128 до 127 .
    При делении слов со знаком частное лежит  вне диапазона от -32768 до 32767
Лекция  (6,7). Команды манипулирования битами.
    Все команды манипулирования битами делятся три типа:
      Логические команды
      Команды сдвига
      Команды логического сдвига.
Логические  команды
and источник, приемник -операция логического умножения. Команда выполняет поразрядное логическую операцию И (конъюнкция) Результат записывается в приемник.
ог  источник, приемник -операция логического сложения. Команда выполняет поразрядное логическую операцию ИЛИ (дизъюнкция) Результат записывается в приемник. хог источник, приемник -операция логического исключающего сложения. Команда выполняет поразрядное логическую операцию исключающего сложения Результат записывается в приемник.
    xor 0 =0
    xor 0 =1 
    0
    xor 1 =1 
    0
    xor 0 =0

хог ax,ax; ax=0
test источник, приемник -. операция проверить. Команда выполняет поразрядное логическую операцию И  Результат никуда не записывается. Изменяется состояние флагов Zf, sf и cf/
not операнд - операция логического отрицания. Поразрядное инвертирование каждого бита операнда. Результат записывается в операнд.
Команды сдвига
Общий формат этих команд
КОП операнд, счетчик_сдвигов
Команды этой группы обеспечивают манипуляции  над отдельными битами операндов, но иным способом, чем логически команды, рассмотренные выше. Все команды сдвига помещают биты в поле операнда влево или вправо, в зависимости кода операции.
    Все команды сдвига делятся на команды:
Линейный  сдвиг
Осуществляется  сдвиг по следующей схеме:
    Очередной «выдвигаемы й» бит устанавливается флаг cf
    бит, вводимый в операнд с другого конца, имеет значение 0
    при сдвиге очередного бита он переходит во флаг cf, при этом значение предыдущего сдвинутого бита теряется.
Команды линейного делятся на: команды логического сдвига команды арифметического сдвига.
К командам логического сдвига относятся
shl операнд, счетчик_сдвигов - логический сдвиг влево. Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчика_сдвигов. Справа (в позицию младшего бита) вписываются нули
shr   операнд, счетчик_сдвигов логический сдвиг вправо. Содержимое операнда сдвигается вправо на количество битов, определяемое значением счетчика_сдвигов.  Слева (в позицию старшего бита) вписываются нули
shl ah,4
Команды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работают со знаковым разрядом операнда
    sal операнд, счетчик_сдвигов арифметический сдвиг влево. Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчика_сдвигов. Справа (в позицию младшего бита) вписываются нули. Команда sal не сохраняет знака, но устанавливает флаг cf в случае смены знака очередным выдвигаемым битом.
Команда сравнения
Команда CMP, ; которая обычно используется для  изменения состояния флагов, на основании  которых команды передачи управления «принимают решение» передавать или не передавать управление.
Подобно команде SUB команда CMP вычитает операнд-источник из операнда-приемника и в зависимости от результата устанавливает или обнуляет флаги. Но в отличии от команды SUB команда CMP не сохраняет результат вычитания, т.е. не изменяет операнды.
Формат команды
СМР операнд1, операнд2 

Перечень команд условного перехода для команды  cmp операнд_1, операнд_2 

Типы  операндов Мнемокод команды  условного перехода Критерий условного  перехода Значения флагов для осуществления перехода
Любые je операнд_1= операнд_2 zf=1
Любые jne операнд_1<> операнд_2 zf=0
Со  знаком jl/jnge операнд_1< операнд_2 sf<>of
Со  знаком jle/jng операнд_1<= операнд_2 sf<>of or zf=1
Со  знаком jg/jnle операнд_1> операнд_2 sf=of and zf=0
Со  знаком jge/jnl операнд_1>= операнд_2 sf=of
Без знака jb/jnae операнд_1< операнд_2 cf=1
Без знака jbe/jna операнд_1<= операнд_2 cf=1 or zf=1
Без знака ja/jnbe операнд_1> операнд_2 cf=0 and zf=0
Без знака jae/jnb операнд_1>= операнд_2 cf=0
 
Ввод-вывод строки 

     Использовать  базовые DOS для ввода и вывода строк крайне неудобно т.к. они обеспечивают только посимвольную обработку данных. И для ввода с клавиатуры одной строки нам пришлось бы организовывать цикл. Существует более эффективные способы обработки строк.
     Рассмотрим  пример использования команд условных переходов для обработки символов. Пусть мы вводим с клавиатуры некоторую строку символов (например, имя файла), и хотим, чтобы в программе эта строка была записана прописными буквами, независимо от того, какие буквы использовались при ее вводе. Между прочим, при вводе с клавиатуры команд DOS система всегда выполняет эту операцию, поэтому и команды, и ключи, и имена файлов можно вводить как прописными, так и строчными буквами - DOS во всех случаях преобразует все буквы в прописные. 

code segment
assume cs:code, ds:data
main proc
      mov ax,data   ;Инициализируем
      mov ds,ax   ;регистр DS
;Выведем  служебное сообщение
      mov ah,09h   ;Функция вывода
      mov dx,offset msg ;адрес сообщения
      int 21h  
;Поставим  запрос к DOS на  ввод строки
      mov ah,3Fh   ;функция ввода
      mov bx,0   ;дескриптор клавиатуры
      mov cx,80   ;ввод максимум 80 байт
      mov dx,offset buf ;адрес буфера ввода
      int 21h
      mov actlen,ax  ;фактически введено
;Превратим  строчные русские  буквы в прописные
      mov cx,actlen  ;длина введенной строки
      mov si,0   ;указатель в буфере
filter:  mov al,buf[si] ;возьмем символ
      cmp al,'а'   ;меньше «а»?
      jb noletter   ;да, не преобразовывать
      cmp al,'я'   ;Больше «я»?
      ja noletter   ;да, не преобразовывать
      cmp al,'п'   ;больше «п»?
      ja more   ;да, на дальнейшую программу
      sub al,20h   ;«а»..«п». преобразуем в прописную букву
      jmp store   ;на сохранение в буфер
more: cmp al,'р'   ;меньше «р»(псевдографика)?
      jb noletter   ;>п,<р не изменять
      sub al,50h   ; «р»..«я». Преобразуем в прописную букву
store:  mov buf[si],al ;отправим назад в buf
noletter: inc si  ;сместим указатель
loop filter    ;цикл по всем символам
;Выведем  результат преобразования  на экран
      mov ah,40h   ;функция ввода
      mov bx,1   ;дескриптор экрана
      moc cx,actlen  ;длина сообщения
      mov dx,offset buf ;адрес сообщения
      int 21h
      mov ah,01   ;остановим программу
      int 21h   ;в ожидании нажатия клавиши
                         ;Завершим программу
      mov ax4C00h
      int 21h
main endp
code ends
data segment
msg db 'Вводите! $'
buf db 80 dup(' ')
actlen dw 0
data ends
stk segment stack
dw 128 dup (?)
stk ends
end main
 
     В начале программы на экран выводится  служебное сообщение "Вводите!", которое служит запросом программы, адресованным пользователю. Далее с  помощью функции DOS 3Fh выполняется  ввод строки текста с клавиатуры. Функция 3Fh может вводить данные из разных устройств - файлов, последовательного порта, клавиатуры.
     Различные устройства идентифицируются их дескрипторами. При работе с файлами дескриптор каждого файла создается системой в процессе операции открытия или  создания этого файла, а для стандартных устройств - клавиатуры, экрана, принтера и последовательного порта действуют дескрипторы, закрепляемые за этими устройствами при загрузке системы. Для ввода с клавиатуры используется дескриптор 0, для вывода на экран дескриптор.
     При вызове функции 3Fh в регистр ВХ следует занести требуемый дескриптор, в регистр DX - адрес области в программе, выделенной для приема вводимых с клавиатуры символов, а в регистр СХ - максимальное число вводимых символов. Мы считаем, что пользователь не будет вводить более 80 символов. Можно ввести и меньше; в любом случае ввод строки следует завершить нажатием клавиши <Enter>. Функция 3Fh, отработав, вернет в регистре АХ реальное число введенных символов (включая коды 13 и 10, образуемые при нажатии клавиши <Enter>). В примере 3.5 число введенных символов сохраняется в ячейке actlen с целью использования далее по ходу программы.
Далее в цикле из actlen шагов выполняется  анализ каждого введенного символа  путем сравнения с границами  диапазонов строчных русских букв. Русские строчные буквы размещаются в двух диапазонах кодов ASCII (а...п и р...с), причем для преобразования в прописные букв первого диапазона их код следует уменьшать на 20h, а для преобразования букв второго диапазона - на 50h. Поэтому анализ проводится с помощью четырех команд сравнения сmр и соответствующих команд условных переходов. Модифицированный символ записывается на то же место в буфере buf.
    После завершения анализа и преобразования введенных символов, выполняется  контрольный вывод содержимого buf на экран. Поскольку мы заранее не знаем, сколько символов будет введено, вывод на экран осуществляется функцией 40h, среди параметров которой указывается число выводимых символов. Так же, как и в случае функции ввода 3Fh, для функции вывода 40h в регистре ВХ необходимо указать дескриптор устройства ввода, в данном случае экрана, а в регистре DX - адрес выводимой строки.
 
Лекция(8,9,10). Команды обработки строк
Цель:   Объяснить  назначение   специальных   цепочечных   команд, используемых для обработки символьных данных.
    Для обработки строковых данных  ассемблер  имеет  пять  команд обработки строк:
MOVS -    переслать один байт или одно слово из  одной  области  памяти  в  другую;
LODS -    загрузить из памяти один байт в регистр  AL  или  одно  слово  в регистр AX;
STOS -    записать содержимое регистра AL или AX в память;
CMPS -    сравнить содержимое двух областей памяти, размером  в  один байт или в одно слово;
SCAS -    сравнить содержимое регистра AL или AX с содержимым памяти.
Префикс REP позволяет этим командам
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.