4890

Команды пересылки данных

Реферат

Информатика, кибернетика и программирование

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

Русский

2012-11-28

61.5 KB

4 чел.

Команды пересылки данных

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

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

Приведем несколько примеров использования этой команды.

MOV AX, val   ;пересылка из памяти в регистр

MOV val, AX  ;и наоборот

MOV DS, AX  ;пересылка между 16-разрядными регистрами

MOV BL, AL  ;пересылка между 8-разрядными регистрами

MOV CL, -25  ;пересылка константы в регистр

MOV val, 234h  ;или в память

В команде MOV исключаются следующие сочетания операндов:

  1.  Нельзя осуществить непосредственную пересылку данных из одной ячейки памяти в другую. Чтобы выполнить такую пересылку, данные источника необходимо загрузить в регистр общего назначения, а затем переслать содержимое этого регистра в приемник. Например, если val1 и val2 две переменные, то для пересылки значения из одной переменной в другую можно воспользоваться командами:

MOV AX, val1

MOV val2, AX

  1.  Нельзя загрузить непосредственно адресуемый операнд в регистр сегмента.
  2.  Нельзя непосредственно переслать значение одного регистра сегмента в другой. Подобные пересылки модно делать через регистр общего назначения. Например, чтобы регистр DS указывал на тот же сегмент, что и регистр ES, можно воспользоваться командами

MOV AX, ES

MOV DS, AX

  1.  Нельзя использовать регистр CS в качестве приемника в команде MOV.

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

XCHG AX, val   ;обмен значения регистра и ячейки памяти

XCHG val, AX  ;и наоборот

XCHG BX, AX  ;обмен между 16-разрядными регистрами

XCHG BL, AL  ;обмен между 8-разрядными регистрами

Арифметические команды

Арифметические команды могут обрабатывать четыре типа чисел – беззнаковые двоичные, знаковые двоичные, беззнаковые упакованные десятичные и беззнаковые неупакованные десятичные. Двоичные числа могут быть 8- и 16-разрядными. Десятичные упакованные числа содержат в байте две цифры, неупакованные – одну.

Беззнаковые 8-разрядные двоичные числа могут иметь значение от 0 до 255. Для представления беззнаковых чисел в диапазоне от 0 до 65 535 используются 16 разрядов. Над беззнаковыми двоичными числами могут выполняться операции сложения, вычитания, умножения и деления.

Знаковые двоичные числа (целые) также могут быть 8- и 16-разрядными. Самый старший (самый левый) бит знакового числа интерпретируется как знак этого числа: 0 – положительное число, 1 – отрицательное. Отрицательные числа представляются в стандартном двоичном дополнительном коде. Так как старший бит знакового числа используется для обозначения знака, диапазон представления 8-разрядных знаковых чисел от -128 до +127. 16-разрядное целое число представляется в диапазоне от -32 768 до +32 767. Нуль представляется положительным числом. Для знаковых чисел могут выполняться операции сложения, вычитания, умножения и деления.

Рассмотрим арифметические команды языка ассемблера.

Сложение

ADD (операнд назначения),(операнд-источник)

Сумма двух операндов, которые могут быть байтами или словами, помещается в операнд назначения. Размеры операндов должны быть одинаковыми, и только один операнд может быть операндом памяти. Регистр сегмента не может быть операндом назначения. Оба операнда могут быть знаковыми или беззнаковыми числами. Команда ADD изменяет значение флагов AF, CF, OF, PF, SF и ZF.

Пример.

mov BX, 1FFEh

mov CX, 3

add BX, CX    ; ВХ=2001h

ADC (операнд назначения),(операнд-источник)

Команда ADC (суммирование с учетом разряда переноса) суммирует операнды, которые могут быть байтами или словами, и добавляет 1, если установлен разряд переноса; результат помещается в операнд назначения. Оба операнда могут быть знаковыми или беззнаковыми числами. Команда ADD изменяет значение флагов AF, CF, OF, PF, SF и ZF. Так как команда ADC учитывает значение разряда переноса от предыдущей операции, это может быть использовано для организации суммирования чисел произвольной разрядности.

Пример 1.

mov AX, 1125h

adc AX, 2C25  ; AX=3D48h, если CF=1

Пример 2.

В сегменте данных:

numlow DW 0FFFh  ;Младшая часть 2-го слагаемого

numhigh DW 0005h  ;Старшая часть 2-го слагаемого

    ;Число 5FFFh=393215

В сегменте кодов:

mov  AX, 0005h  ;Младшая часть 1-го слагаемого

mov  BX, 0002h  ;Старшая часть 2-го слагаемого

    ;Число 20005h=131077

add  AX, numlow  ;Сложение младших частей, CF=1

adc  BX, numhigh  ;Сложение старших частей

;с переносом

;BX:AX=0008:0004h 

;Число 80004

h=524292

INC (операнд назначения)

Команда INC (инкремент) добавляет единицу к операнду назначения. Операнд может быть байтом или словом и трактуется как беззнаковое двоичное число. Команда INC изменяет значение флагов AF, OF, PF, SF и ZF; значение флага CF эта команда не изменяет. Не допускается использовать в качестве операнда непосредственное значение.

Вычитание

SUB (операнд назначения),(операнд-источник)

Содержимое операнда-источника вычитается из содержимого операнда назначения, и результат помещается в операнд назначения. Операнды могут быть знаковыми или беззнаковыми, двоичными или десятичными (см. команды AAS и DAS), однобайтовыми или двухбайтовыми числами. Команда SUB изменяет значение флагов AF, CF, OF, PF, SF и ZF.

SBB (операнд назначения),(операнд-источник)

Команда SBB (вычитание с учетом заема) вычитает содержимое операнда-источника из содержимого операнда назначения, затем вычитает из результата 1, если был установлен флаг переноса CF. Результат помещается на место операнда назначения.

Операнды могут быть знаковыми или беззнаковыми, двоичными или десятичными (см. команды AAS и DAS), однобайтовыми или двухбайтовыми числами. Команда SBB изменяет значение флагов AF, CF, OF, PF, SF и ZF. Команда SBB может быть использована для организации вычитания многобайтовых чисел.

DEC (операнд назначения)

Команда DEC (декремент) вычитает единицу из операнда назначения, который может быть одно- или двухбайтовым. Команда DEC изменяет содержимое флагов AF, OF, PF, SF и ZF. Содержимое флага CF при этом не изменяется.

NEG (операнд назначения)

Команда NEG (инверсия) вычитает операнд назначения, который может быть байтом или словом из 0 и помещает результат в операнд назначения. Такая форма двоичного дополнения числа пригодна для инверсии знака целых чисел. Если операнд нулевой, его знак не меняется. Попытка применить команду NEG к байтовому числу -128 или к двухбайтовому числу -32 768 не приводит к изменению значения операнда, но устанавливает флаг OF. Команда NEG воздействует на флаги AF, CF, OF, PF, SF и ZF. Флаг CF всегда установлен за исключением случая, когда операнд равен нулю, когда этот флаг сброшен. Не допускается использовать в качестве операнда непосредственное значение.

CMP (операнд назначения),(операнд-источник)

Команда СМР (сравнение) вычитает операнд-источник из операнда назначения, не изменяя при этом значения операндов. Операнды могут быть байтовыми или двухбайтовыми числами. Хотя значения операндов не изменяются, значения флагов обновляются, что может быть учтено в последующих командах условного перехода. Команда CMP воздействует на флаги AF, CF, OF, PF, SF и ZF. При совпадении значений операндов взводится флаг ZF. Флаг переноса взводится, если операнд назначения меньше операнда-источника.

Умножение

MUL (операнд-источник)

Команда MUL (умножение) выполняет беззнаковое умножение операнда-источника и содержимого аккумулятора. Если операнд-источник однобайтовый, осуществляется умножение на содержимое регистра AL, а двухбайтовый результат возвращается в регистры AH и AL. Если операнд-источник двухбайтовый, осуществляется умножение на содержимое регистра AX, а четырехбайтовый результат возвращается в пару регистров DX и AX.

Операнды рассматриваются как беззнаковые двоичные числа. Если старшая половина результата (регистр AH при однобайтовом умножении и DX при двухбайтовом умножении) взводятся флаги CF и OF, в противном случае эти флаги сбрасываются.

Если после выполнения умножения взведены флаги CF и OF, это говорит о наличии значащих цифр результата в регистре AH или DX. Содержимое флагов AF, PF, SF и ZF после выполнения команды умножения неопределено.

Пример 1.

mov AL, 5 ; первый сомножитель

mov BL, 3 ; второй сомножитель

mul BL ;AX=000Fh

Пример 2.

mov AX, 255 ; первый сомножитель

mov BX, 255 ; второй сомножитель

mul BX  ; DX=0001h,AX=0000h

   ; число 65536

IMUL (операнд-источник)

Команда IMUL (целочисленное умножение) выполняет знаковое умножение операнда-источника и содержимого аккумулятора. Если операнд-источник однобайтовый, осуществляется умножение на содержимое регистра AL, а двухбайтовый результат возвращается в регистрах AH и AL. Если операнд-источник двухбайтовый, осуществляется умножение на содержимое регистра AX, а четырехбайтовый результат возвращается в паре регистров DX и AX. Операнды рассматриваются как беззнаковые двоичные числа. Если старшая половина результата (регистр AH при однобайтовом умножении и DX при двухбайтовом умножении) взводятся флаги CF и OF, в противном случае эти флаги сбрасываются. Если после выполнения умножения взведены флаги CF и OF, это говорит о наличии значащих цифр результата в регистре AH или DX. Содержимое флагов AF, PF, SF и ZF после выполнения команды целочисленного умножения неопределено.

Пример 1.

mov AL, 5 ; первый сомножитель

mov BL, 3 ; второй сомножитель

mul BL ;AX=000Fh

Пример 2.

mov AL, -3 ; первый сомножитель

mov BL, 5  ; второй сомножитель

mul BL  ; AX=FFF1h

   ; число 65536

Деление

DIV (операнд-источник)

Команда DIV (деление) выполняет беззнаковое деление содержимого аккумулятора (и его расширения) на операнд-источник. Если операнд-источник однобайтовый, осуществляется деление двухбайтового делимого, расположенного в регистрах AH и AL. Однобайтовое частное получается в регистре AL, а однобайтовый остаток – в регистре AH. Если операнд-источник двухбайтовый, осуществляется деление четырехбайтового делимого, расположенного в регистрах DX и AX. Двухбайтовое частное при этом получается в регистре AX, а двухбайтовый остаток – в регистре DX. Если значение частного превышает разрядность аккумулятора (0FFh для однобайтового деления и 0FFFFh – для двухбайтового) или выполняется попытка деления на нуль, генерируется прерывание типа 0, а частное и остаток остаются неопределенными. Содержимое флагов AF, CF, OF, PF, SF и ZF после выполнения команды DIV неопределено.

Пример 1.

mov AX, 506 ;Делимое

mov BL, 50 ;Делитель

div BL  ;AL=0Ah (частное)

  ;AH=06h (остаток)

Пример 2.

mov DX, 1  ;Старшая часть делимого 65537

mov AX, 1  ;Младшая часть делимого 65537

mov CX, 256 ;Делитель

div CX  ;AX=0100h (частное)

  ;DX=0001h (остаток)

IDIV (операнд-источник)

Команда IDIV (целочисленное деление) выполняет знаковое деление содержимого аккумулятора (и его расширения) на операнд-источник. Если операнд-источник однобайтовый, осуществляется деление двухбайтового делимого, расположенного в регистрах AH и AL. Однобайтовое частное получается в регистре AL, а однобайтовый остаток - в регистре AH. Для байтового целочисленного деления положительное частное не может быть больше значения +127 (7Fh), а отрицательное не может быть меньше -127 (81h). Если операнд-источник двухбайтовый, осуществляется деление четырехбайтового делимого, расположенного в регистрах DX и AX. Двухбайтовое частное при этом получается в регистре AX, а двухбайтовый остаток - в регистре DX. Для двухбайтового целочисленного деления положительное частное не может быть больше значения +32767 (7FFFh), а отрицательное не может быть меньше значения -32767 (8001h). Если частное положительное и превышает максимум или отрицательное и меньше минимума, генерируется прерывание типа 0, а частное и остаток остаются неопределенными. Частным случаем такого события является попытка деления на нуль. Содержимое флагов AF, CF, OF, PF, SF и ZF после выполнения команды IDIV неопределено.

Пример.

mov AX, -506 ;AX=FE06h Делимое

mov BL, 50 ;Делитель

idiv BL  ;AL=F6h=-10 (частное)

  ;AH=FAh=-6 (остаток)

CBW

Команда CBW (преобразование байта в слово) расширяет знак байта в регистре AL на весь регистр АХ. Команда CBW не воздействует на флаги. Команда CBW может быть использована для получения двухбайтового делимого из однобайтового перед выполнением команды деления.

Пример.

mov AL, 5  

cbw   ;AX=0005h

mov AL, -2 ;AL=FEh=-2

cbw   ;AX=FFFEh=-2

CWD

Команда CWD (преобразование слова в двойное слово) расширяет знак слова в регистре AХ на пару регистров АХ и DX. Команда CWD не воздействует на флаги. Команда CWD может быть использована для получения четырехбайтового делимого из двухбайтового перед выполнением команды деления.

Результаты арифметических команд воздействуют на состояние 6 флагов. Большая часть этих флагов может быть проанализирована после выполнения арифметических команд с помощью команд условного перехода, а также с помощью команды INTO (прерывание по переполнению). Воздействие арифметических команд на флаги описано ниже.

  •  CF (флаг переноса): Если в результате сложения осуществляется перенос из старшего бита, флаг переноса взводится; в противном случае флаг переноса сбрасывается. При вычитании флаг переноса взводится, если осуществляется заем в старший бит результата; при отсутствии заема флаг сбрасывается. Следует иметь в виду, что при возникновении знакового переноса CF = OF (флаг переполнения). Флаг переноса CF может использоваться для индикации беззнакового переполнения. Команды ADC (сложение с учетом разряда переноса) и SBB (вычитание с учетом разряда переноса) учитывают значение флага переноса, что позволяет реализовывать многобайтовые (например, 32- и 64-битовые) операции.
  •  AF (флаг дополнительного переноса): Если в результате сложения осуществляется перенос из младшего полубайта в старший, флаг дополнительного переноса взводится; в противном случае флаг сбрасывается. При вычитании флаг дополнительного переноса взводится, если осуществляется заем из старшего полубайта в младший; при отсутствии заема флаг сбрасывается. Флаг дополнительного переноса используется при десятичной коррекции операций.
  •  SF (флаг знака): После арифметических и логических операций флаг знака принимает значение старшего (7 или 15) бита результата. Для знаковых двоичных чисел флаг знака принимает значение 0 при положительном результате и 1 при отрицательном (если только не возникло переполнение). Команда условного перехода, выполняемая после операции со знаковыми числами, может использоваться для ветвления программы в зависимости от знака результата.
  •  ZF (флаг нуля): Если в результате арифметической или логической операции получается нулевой результат, флаг нуля взводится; в противном случае флаг нуля сбрасывается. Команда условного перехода могут использоваться для ветвления программы в зависимости от равенства или неравенства нулю результата предыдущей операции.
  •  PF (флаг четности): Если младшие 8 бит результата арифметической или логической операции содержат четное число единичных битов, флаг четности взводится; в противном случае флаг четности сбрасывается. Флаг четности может использоваться для проверки правильности принятого кода при передаче данных по линиям связи.
  •  OF (флаг переполнения): Если в результате операции получается очень большое положительное число или очень маленькое отрицательное, которое не помещается в операнд назначения, флаг переполнения взводится; в противном случае флаг переполнения сбрасывается. Флаг переполнения индицирует знаковое арифметическое переполнение. Состояние этого флага может быть проверено командой условного перехода или командой INTO (прерывание по переполнению). Флаг переполнение может игнорироваться при выполнении операций с беззнаковыми числами.


 

А также другие работы, которые могут Вас заинтересовать

43294. Усилитель электрических колебаний звуковой частоты 561.5 KB
  Усилителем электрических колебаний называется устройство, которое позволяет при наличии на его входе колебания с некоторым уровнем мощности получить на выходной нагрузке те же колебания, но с большим уровнем мощности.
43295. Разработка технологического процесса изготовления детали “Стойка задняя” 285.5 KB
  Минимальный припуск на обработку определяем по формуле: Суммарное пространственное отклонение расположения поверхностей с закреплением заготовки в трех кулачковом патроне определяем по формуле: где: Δкор отклонение оси детали от прямолинейности;1том. Технологические операции и переходы обработки элементных повстей Элементы Припуска Расчетный припуск 2Ziminмкм Расчетный миный размер мм Допуск TD мкм Принятые...
43296. Расчет усилителя звуковой частоты 1.49 MB
  Анализ технического задания В техническом задании мне было предложено разработать УЗЧ по заданным параметрам. Предполагается использование такого усилителя для высокочастотного усиления сигнала высокого качества например записанного на компакт диск поэтому fн я оставилна 20 Гц для лучшего звучания бассов. Параметры микросхемы таковы: Uп=22В P=18Bт Rн=8Ом Fн=20Гц Fв=20кГц Iп=120мА Кг=03 Rвх=50кОм Кш=03мкВ Ку=26 дБ 4. Выбор элементов будем производить на основе выходных параметров усилителя...
43297. Расчет усилителя звуковой частоты мощностью 30 мВ 510 KB
  Широкое распространение получили операционные усилители на основе которых можно сконструировать отдельные каскады и структурные блоки усилителя. Техническое задание Выходная мощность Pвых 7 Вт Сопротивление нагрузки Rн 4 Ом Входное напряжение Uвх 35мВ...
43298. Проектирование усилителя звуковой частоты на основе интегральных микросхемах 605.5 KB
  Схема усилителя в среде Micro Cp15 Построение АЧХ усилителя мощности звуковой частоты. Широкое распространение получили операционные усилители на основе которых можно сконструировать отдельные каскады и структурные блоки усилителя. Техническое задание Выходная мощность Pвых 7 Вт Сопротивление нагрузки Rн...
43299. Електричні станції і підстанції систем електропостачання 22.49 MB
  Для виконання даного проекту студенту необхідно виконати ряд завдань: розрахувати потужності силових трансформаторів вибрати схеми електричних з’єднань на вищих напругах розрахувати та вибрати комутаційні апарати та струмоведучі частини представити графічну частину. Вибір номінальної потужності силових трансформаторів ТЕЦ підстанції. Розробка схеми і вибір трансформаторів власних потреб станції підстанції.1–Терміни виконання проекту та критерії оцінювання знань за результатами захисту проекту № модуля Курсове проектування Виконання...
43300. Реверсирование двигателя 761 KB
  Поэтому требуется регулировать напряжение на обмотке возбуждения двигателя. Таким образом необходимо построить систему управления которая содержит два канала управления: первый – по цепи якоря второй по цепи возбуждения двигателя. двигателя номинальному значению.
43301. Создание функциональной схемы микропрограммного управляющего автомата 1.09 MB
  Построение графа автомата и структурной таблицы переходов и Выходов 12 7.1 Построение графа автомата и структурной таблицы переходов и выходов 22 22 8. Получение логических выражений для функций возбуждения RSтриггеров 28 9 Построение функциональной схемы управляющего микропрограммного автомата 30 10 Заключение 31 Список использованных сокращений 32 Библиографический список 33 Приложение А 34 Приложение Б 35 Приложение В 36 Приложение Г 37 Приложение Д 38 Приложение Е 39 УДК 681. Синтез микропрограммного управляющего автомата.
43302. Разработка технологического процесса изготовления детали Шток 1.18 MB
  Шток является самой ответственной частью вентиля, т.к. его поверхности 2 и 6 выполнены с высокой точностью и отполированы: коническая поверхность 2 плотно прилегает к корпусу вентиля и обеспечивает герметичность; цилиндрическая поверхность 6 соприкасается с рядом уплотнительных колец и также обеспечивает герметичность. Помимо всего вышеперечисленного поверхности 2 и 6, а также поверхность 9 подвергаются износу трением при эксплуатации: поверхность 2 о корпус вентиля, поверхность 6 об уплотнительные кольца, поверхность 9 об соединительное кольцо.