Арифметические команды с целыми двоичными числами.



Мнемокод операции  операнды Возможные комбинации операндов

 

ADD

сложение

Приемник, источник

Константа с аккумулятором
Константа с регистром/памятью
Регистр или память с регистром
регистр с регистром или памятью  

 

ADC

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

Приемник, источник

  Константа с аккумулятором+CF
Константа с регистром/памятью+CF
регистр/память с регистром+CF
регистр с регистром/памятью +CF

INC

инкремент

Приемник

Увеличение регистра/памяти + 1
 Увеличение 16-битового регистра+1

SUB

Вычитание

 

Приемник, источник

Аккумулятор- Константа
регистр/память - регистр
регистр - регистр/память

 

SBB

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

 

Приемник, источник

константа из аккумулятора-CF
Константа из регистра/памяти-CF
регистр/память – регистр-CF
регистр - регистр/память- CF

DEC

Декремент

Приемник

Уменьшение регистра/памяти на 1
 Уменьшение 16-битового регистра на 1
NEG Изменение знака Приемник регистр/память:= 0-(регистр/память)

CMP

Сравнение

Приемник, источник

константа с аккумулятором
константа с регистром/памятью
регистр/память с регистром
регистр с регистром/памятью
MUL Умножение источник  Аккумулятор * на регистр/память без знака
IMUL Умножение источник Аккумулятор* на регистр/память со знаком
DIV Деление без знака источник деление аккумулятора на регистр/память
IDIV Деление со знаком источник деление аккумулятора на регистр/память со знаком
CBW - преобразование байта в слово
CWD - преобразование слова в двойное слово

Организация разветвлений на ассемблере

 

Команды передачи управления

Рассмотрим два вида команд передачи управления: ·  команда безусловного перехода;

· команда условной передачи управления.

Команды передачи управления имеют лишь один операнд, т.е. они одноадресные.

Команда безусловного перехода имеет вид:  jmp метка Например: JMP M 1    означает - перейти на команду с меткой M1 Команда JMP может передать управление и на короткое расстояние и на дальнее.

Команды условной передачи управления.

Это команды, нарушающие естественный порядок выполнения программы  лишь при выполнении некоторого условия. Общий формат команд условной передачи        Jx близкая метка где х - модификатор, состоящий из одной, двух или трех букв.Команды условного перехода могут передать управление на 128 байт назад или на 127 байт вперед, т.е. только на короткое расстояниеУсловные переходы делятся на две группы: 1. Проверяющие результаты предыдущей арифметической или логической команды;2. Управляющие итерациями фрагмента программы.Команды первой группыПервая группа команд условного перехода проверяет текущее состояние регистра флагов. Затем в зависимости от кодов условия команда делает переход (или не делает). Команды условного перехода не устанавливают флаги, а только проверяют их текущее состояние. Команды условного перехода различаются для чисел со знаком и без знака. Таблица команд условной передачи и условий их выполнения Для чисел БЕЗ знака
  Мнемокоды Перевод Анализируемые флаги
1  JA или JNBE                Переход, если ВЫШЕ или НЕ НИЖЕ CF=0 и YF=0
2  JAE или JNB                 Переход, если Выше или равно CF=0
3 JB или JNAE                Переход, если НИЖЕ или НЕ ВЫШЕ CF=1
4 JBE или JNA                 Переход, если НИЖЕ или равно CF=1 или ZF=1
5 JE Переход, если РАВНО ZF=1
Для чисел со ЗНАКОМ
  Мнемокоды Значение Анализируемые флаги
1  JG или JNLE                Переход, если БОЛЬШЕ или НЕ МЕНЬШЕ SF=0 и   ZF=0
2 JGE или JNL                 Переход, если Выше или Равно SF=ZF
3 JL или JNGE                Переход, если Меньше SF<>OF
4 JLE или JNG                 Переход, если Меньше или Равно ZF=1 или SF<>OF
5 JE Переход, если РАВНО ZF=1
Перед командой условной передачи управления обычно используется команда сравнения целых чисел CMP, которая устанавливает регистр флагов. Она  вычитает из приемника содержимое источника без изменения приемника. Это двухадресная команда        CMP пpиемник,  источник; Выполняется установка флагов AF, CF, OF,PF,SF,ZFПример         MOV AX, 105 ; 105 ->AX   CMP AX, 100 ; (AX)-100 =5 Из регистра AX  вычитается 100, результат=+5, регистр  AX  не меняется   Устанавливаются флаги : SF=1,ZF=0; CF=0;PF=1;OF=0           Команды передачи управления не влияют на флаги, поэтому для выделения трех альтернатив: "меньше", "равно" и "больше", несколько команд условной передачи управления могут следовать друг за другом.Команды, управляющие итерациями фрагмента программы.

Простейшая команда среди них — команда LOOP. Команда LOOP уменьшает регистр СХ и передает управление на метку, если содержимое регистра СХ не равно 0. Если вычитание 1 из регистра СХ привело к нулевому результату, команда LOOP не делает перехода и выполняется следующая команда. Ниже приведен принцип работы команды LOOP:

 

Регистр СХ как счетчик итераций цикла в команде LOOP используется неявно.  

 

 Схема фрагмента программ использования команды LOOP:

MOV CX,  N ;  

 BODY:

Команды тела цикла

LOOP BODY

 

Необходимо помнить следующие правила использования команды LOOP для организации цикла:

1)Надо поместить число итераций в регистр СХ перед  циклом;

2)Если в СХ был  0, по команде loop цикл  проработает  65536 раз;

3)Нельзя  внутри цикла изменять регистр СХ ;

4) Команды тела цикла не должны занимать в памяти больше  128 байт.

 

Ввод – вывод данных

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

Число должно быть преобразовано из двоичного кода в десятичное число;

Десятичное число должно быть преобразовано в строку символов (обычно в коде ASCII);

Строка символов в коде ASCII должна быть передана на терминал.

Для выполнения простых операций ввода и вывода вводится некоторое расширение языка ассемблера. Это дополнительные команды языка называются макрокомандами. Они представляют собой комбинации команд базового набора, оформленные в виде так называемого «макроопределения». Макрокоманды обрабатываются на этапе трансляции подобно директивам языка ассемблера: происходит обращение к макроопределению и соответствующий текст( так называемое макрорасширение ) помещается на место вызывавшей макрокоманды. Исходный текст программы, естественно, увеличивается на длину макрорасширения. Макроопределения хранятся в текстовом файле в виде библиотеки макросов mac.lib. 

Директива Include mac.lib подключает библиотеку. Ее следует разместить в начале файла с текстом исходного модуля на языке Ассемблера.

Для управления объемом листинга существуют директивы:

 % nolist    - прекратить выдачу листинга.

% list         - разрешить выдачу листинга.

Для того, чтобы листинг не содержал тексты всех макросов библиотеки, следует отменить выдачу листинга перед директивой Include mac.lib , а после нее разрешить выдачу листинга.

 

%nolist ….

Include mac.lib

% list

 

 Для ввода целого числа предназначен макрос ввода с клавиатуры

Key_$2bin ; ввод числа со знаком в регистр ax.

 Для вывода целого числа на экран - макрос

print_number; вывод числа со знаком из регистра ax на экран.

Список всех макросов находится в файле list.maс, он приведен в конце настоящих методических указаний.

Пример выполнения заданий

;.Пример вычисления по формуле

;y=min(a,b), a и b- числа со знаком

; программа c командами УПРАВЛЕНИЯ

%nolist

include mac.lib

%list

a_stack segment stack

    db        256 dup (?)

a_stack    ends; конец сегмента стека

 

a_data segment para

A   DW  ?

b   DW  ?

Y   DW  ?

mes1 db 10,13,' ВВедите значение A $'

mes2 db 10,13,' ВВедите значение B $'

mes3 db 10,13,' Меньшее = $'

 a_data ends ; конец сегмента данных

 

a_cod segment para

; коды программы

 Assume DS: a_data, SS: a_stack, CS: a_cod

 

start:                             

          mov ax, a_data            ;

          mov DS, ax     

 ; ввод а

  message mes1

  key_$2bin

   mov a,ax

 ; ввод b

  message mes2      

  key_$2bin

  mov b,ax

; Поиск мин(a,b) 

  mov ax, a ; a заносим в AX

  mov bx,b ; b заносим в BX

  cmp ax,bx ; сравнение AX-BX  

  jle mina ; переход к метке, если a-b <=0

minb: mov y,bx

  jmp pro

mina: mov y,ax  

 ; результат заносим в поле памяти(ячейка у)

PRO:

message mes3

  mov ax,y       

   print_number ; вывод

 

; выход из программы:

   mov ah, 4ch

   Int 21h     

A_cod ends ; конец сегмента кода

  End start   ; конец файла

 

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

· . Какое максимальное количество байтов может обойти команда JMP? · . Какое максимальное количество байтов могут обойти команды условного перехода   и LOOP ?· . На какие флаги воздействуют следующие события, и каково значение этих флагов?а) произошло переполнение;в) результат отрицательный;в) результат нулевой;5. Какой регистр меняют команды перехода?

 


Дата добавления: 2019-02-12; просмотров: 210; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!