Подготовьте программу, реализующую следующие опера-



Лабораторная работа № 2

 

Теоретические сведения.  Арифметические операции

            Команды сложения (ADD и ADC)

 

Сложение ADD осуществляет сложение первого и второго операндов и результат помещается на место хранения первого операнда.

Формат:    ADD reg,{ reg / mem / imd }

Схема: <Операнд 1> <--- <Операнд 2> + <Операнд 1> , где

 reg – регистр, mem–память, imd—непосредственное значение.

Сложение с переносом ADC- сложение первого и второго операндов и к результату добавляется значение флага переноса CF=0/1 (бит 0 RF). Результат заносится на место 1-го операнда.

Формат:

   ADC reg, {reg / mem / imd }

Схема:

Операнд 1 >     <---     < Операнд 1 > + < Операнд 2 > + < CF > RF

     Примеры команд:

      add al, 76

      add al, mem_8

      add al, bl

      adc ax, DP2+2

      adc ax, 122

 

         Команды вычитания ( SUB и SBB )

Все абсолютно аналогично для команд вычитания SUB SBB.

Формат: SUB reg, { reg / mem / imd }

Схема: < Операнд 1 > <--- < Операнд 1 >-< Операнд 2 >

Формат: SBB reg, { reg / mem / imd }

Схема: < Операнд 1 > <--- < Операнд 1 >-< Операнд 2 > - < CF

             

                 Команда сравнения ( CMP ).

Команда сравнения операндов CMP аналогична команде SUB, но не производит запись результата. Она используется только для установки флажков в RF перед командами Jmp.

Формат: CMP reg, { reg / mem / imd }

Схема: < Операнд 1 > - < Операнд 2 >

 

           Команды умножения (MUL и IMUL).

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

В бесзнаковом умножении (MUL) флажки CF и OF устанавливаются в 1, если в произведении получен ненулевой старший бит (слово), иначе оба они будут 0.

Если в знаковом умножении (IMUL), старший бит (слово) результата не является расширением знака младшего бита (слова), флажки CF и OF установлены в 1, а в противном случае они равны 0.

Формат:    MUL { reg / mem }

Схема:

         байт                    слово

<AX> <--- <AL>*<Операнд> <DX,AX> <--- <AX>*<Операнд>

if <AH>=0 then CF и OF=0  if <DX>=0 then CF и OF=0

Формат:    IMUL { reg / mem }

Схема:

         байт                    слово

<AX> <--- <AL>*<Операнд> <DX,AX> <--- <AX>*<Операнд>

if <AH>=0 then CF и OF=1  if <DX>=0 then CF и OF=1

 

            Команды деления (DIV и IDIV).

Команды деления получают целое и остаток. Так как делимое вдвое длиннее частного ,то часто возникает переполнение. При возникновении такой ситуации для рассматриваемых команд флаг OF не взводится , а вызывается прерывание, которое аппаратно обрабатывается . Команды аналогичны MUL и IMUL.

Формат:  DIV {reg / mem}

Схема:

    байт

    <AX> /<Операнд> частное -----> <AL>

                    остаток -----> <AH>

                     if <AL> > FFh then INT 0

    слово

    <DX,AX> / <Операнд> Частное -----> <AX>

                        Остаток -----> <DX>

                          if (р-т>32767) OR (р-т<-32767)

                               then INT 0

Формат:       IDIV { reg / mem }

 

Схема:

    байт

    <AX> / <Операнд> частное -----> <AL>

                     остаток -----> <AH>

                       if <AL> > FFh then INT 0

    слово

    <DX,AX> / <Операнд> Частное -----> <AX>

                        Остаток -----> <DX>

                         if (р-т>32767) OR (р-т<-32767)

                                then INT 0

      Пример использования команд умножения и деления:

; X,Y,Z и V - слова

mov AX,X ; умножить (X) на Y

IMUL Y ; и запомнить производение в BX:CX

mov CX,ax

mov BX,dx

mov ax,z ; прибавить к произв. в BX:CX

CWD   ; расшир. со знаком (Z)

add CX,ax

ade bx,dx

SUB cx,540 ; вычесть 540 из BX:CX

SBB bx,0

mov ax,v ; вычесть (BX:CX) из (V) с расшир.

CWD   ; знаком и разделить на (X)

SUB ax,cx ; частное образовать в AX

SBB ax,bx ; а остаток в DX

idiv x ;

                <AX> <-----(IV-(x*y+z-540)/x

                <DX> <----- остаток

 

       Команды автоувеличения и уменьшения.

Автоматически увеличивают (уменьшают) операнд на единицу.

INC - команда увеличивает на +1 исходный операнд, а команда

DEC уменьшает на -1.

Формат:    INC { reg / mem }

Схема:   < Операнд > <--- < Операнд > + 1

Формат:   DEC { reg / mem }

Схема:   < Операнд > <--- < Операнд > - 1

 

                             Команда отрицания (NEG)

Команда "отрицания" NEG - изменяет знак операнда

Формат:    NEG { reg / mem }

Схема:

      < Операнд >  <--- -  < Операнд >

Задание

 

Цель работы - программирование математических формул по индивидуальным заданиям с использованием арифметических команд ассемблера.

 

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

  ; Образец программы для выполнения

; Pабота 3 " Системное программирование"

; Выполнил: Ф. И. О. гр.     Дата:

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

; Вычисление формулы : z=(x+y)*w - w-х/y

 DATAS SEGMENT ; данные для вычисления формулы

X    DW 7

Y    DW 5

W   DW 10

Z    DW ? ; Получим в результате

DATAS ENDS

CODES     SEGMENT

       ASSUME  CS:CODES,DS:DATAS

PROGRAM:

       MOV AX,DATAS

       MOV DS,AX

       MOV AX,X

       ADD AX,Y

       MUL W

       SUB AX,W

       MOV Z,AX

       MOV AX,X

       DIV Y

       SUB Z,AX

       MOV BX,Z

       MOV AX,4С00H

       INT 2H

CODES     ENDS

END PROGRAM

 

Варианты заданий (значения переменных X,Y,W – самостоятельно).

 

 1,21. Подготовьте программу, реализующую следующие операции:

Z = W +(X - Y) / (Y +11).

2,22. Подготовьте программу, реализующую следующие операции:

Z = W/X +(X - Y).

3,23. Подготовьте программу, реализующую следующие операции:

Z = W +(X - 9) -(Y/3).

4,24. Подготовьте программу, реализующую следующие операции:

Z = W * (X - Y) + (Y +11).

5,25. Подготовьте программу, реализующую следующие операции:

Z =(W + 12) -(X - Y)/7.

6,26. Подготовьте программу, реализующую следующие операции:

Z = (W +7)*3/(X - Y).

7,27. Подготовьте программу, реализующую следующие операции:

Z = W/Y +(X -9)/ Y.

8,28. Подготовьте программу, реализующую следующие операции:

Z = W -(X/8 - Y)*(Y/5 -X).

9,29. Подготовьте программу, реализующую следующие операции:

Z = (X - Y)/W + (Y-23).

Подготовьте программу, реализующую следующие опера-

ции: Z = W-(X-45)*3/W +(X - Y).


Дата добавления: 2018-04-05; просмотров: 248; Мы поможем в написании вашей работы!

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






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