Модель арифметико-логічного пристрою

Автор: Пользователь скрыл имя, 29 Декабря 2010 в 01:44, курсовая работа

Описание работы

Мета роботи: навчитися складати програму на мові асемблеру, яка використовує арифметичні та логічні операції.

Завдання:

Скласти програму моделювання операції додавання, віднімання і множення чисел з фіксованою крапкою з заданою кількістю розрядів.

Введення операндів виконувати з клавіатури.

Результати виводити на екран.

Содержание

Вступ 3
1.ЗАГАЛЬНІ ВІДОМОСТІ 4
1.1.Формати числових даних 4
1.2. Виконання арифметичних операцій 5
2. Блок-схема програми 9
2.1.Головна програма 9
2.2. Блок-схеми підпрограм 10
3. Опис роботи програми 14
3.1. Опис роботи головної програм 14

3.2. Опис виконання арифметичних операцій 14

4. Лістинг програми 16

5. Результати виконання програми 26

Висновки 28

Використані джерела 29

Работа содержит 1 файл

Курсова робота варіант_8_неупак.doc

— 353.00 Кб (Скачать)

        add      al,bh             ;учет переноса из младших цифр

        aaa                        ;коррекция сложения

        mov      manc[si+1],al     ;запись правой цифры в промежуточный  результат

        mov      bh,ah             ;запомнить перенос

        dec      si                ;уменьшаем si

        loop     met               ;cx=cx-1 if cx=0 then

        mov      manc,bh           ;старшая цифра произведения

        ;суммирование             

          mov      cx,11             ;кол-во итераций

        mov      si,10             ;начинаем суммирование с младших разрядов

          mov      di,si             ;формируем 

        add      di,11             ;адрес

        sub      di,lop            ;[si+11-lop]

          clc

smm:

        mov      al,manc[si]       ;в al цифру из промежуточного результата умножения

        mov      dl,manmnog[di]    ;в  dl цифру из конечного результата

        adc      al,dl             ;суммируем с учетом переноса 

        aaa                        ;коррекция

        mov      manmnog[di],al    ;заносим  в резльтат

        dec      si                ;уменьшаем si

        dec      di                ;уменьшаем di

        loop     smm               ;cx=cx-1 if cx=0 then

        xor      di,di             ;формируем

    mov      di,11             ;адрес      

        sub      di,lop            ;[11-lop]

        cmp      di,0              ;сравнение

        jne      a1                ;

        adc      manmnog[di],0     ;суммируем с учетом переноса

a1:

        inc      lop               ;увеличиваем lop

        cmp      lop,10            ;сравнение

        je       final             ;на окнчание

        jmp      mett              ;

Final:                              

        dec_asc  a,10              ;приводим a к выводу 

        dec_asc  b,10              ;приводим b к выводу 

        dec_asc  manmnog,20        ;приводим  результат к выводу 

ENDM mnog

start:

;основная программа

          mov      ax,dseg

          mov      ds,ax

          Cls      0000,184Fh

          Set_Kur  01,00

          Scr_Out  titl

          set_kur  24,30

          scr_out  mes_st

          pause

        cls    0000,184Fh

starter:

          cls      0000,184Fh

          mov      lop,1

          Op_In    znA,manA          ;ввод первого числа

          Cls      0000,184Fh

          mov      lop,2

          Op_In    znB,manB          ;ввод второго числа

          Cls      0000,184Fh

      

         Set_Kur  01,25

        Scr_Out  mes5

         Set_Kur  03,15

        Scr_Out  mes6

        Set_Kur  04,15

        Scr_Out  mes7

        Set_Kur  03,19

        Op_Out   znA,manA,10,5

        Set_Kur  04,19

        Op_Out   znB,manB,10,5

        Set_Kur  06,32

        Scr_Out  mes8

        Set_Kur  08,15

         Scr_Out  mes9

         Set_Kur  09,15

        Scr_Out  mes10

         Set_Kur  10,15

         Scr_Out  mes11

        Set_Kur  12,25

        Scr_Out  mes12

   

        ;сравнение чисел

          mov      cx,10

        mov      di,0

comp:

        mov      al,manA[di]

        mov      bl,manB[di]

        cmp      al,bl

         je       nxt

        ja       AmoreB

         jmp      AlessB

nxt:  

        inc      di

         loop     comp

          jmp      AequalB 

        mov      cx,10

         mov      di,0 

AmoreB:

        mov      al,znA

        mov      bl,znB

        cmp      al,bl

        je       @5              ;znA = znB

        jmp      @6

@5:      

        jmp      znequal

@6:   

        mov      al,zna

        mov      znC,al

        mov      znmnog,'-'

         raznost  mana,manb,manc

        Set_Kur  08,21

        Op_Out   znc,manc,11,6

        Summa    mana,manb,manc

        Set_Kur  09,21

       Op_Out   znc,manc,11,6

        jmp      fin

znequal:

     mov      al,zna

     mov      znc,al

     mov      znmnog,'+'

     summa    mana,manb,manc

     Set_Kur  08,21

     Op_Out   znc,manc,11,6

     Raznost  mana,manb,manc

      Set_Kur  09,21

     Op_Out   znc,manc,11,6

     jmp      fin

AlessB:

         mov      al,znA

          mov      bl,znB

         cmp      al,bl

         jne      @3   ;znB <> znA

        jmp      @4

@3:    

          jmp      notequal

@4:

         mov      al,znb

     mov      znc,al

     summa    mana,manb,manc

     Set_Kur  08,21

     Op_Out   znc,manc,11,6

     mov      al,znB

     cmp      al,'+'

     jne      label1

     mov      znC,'-'

     jmp      label2

label1:

      mov      znC,'+'

label2:

    raznost  manb,mana,manc

    Set_Kur  09,21

    Op_Out   znc,manc,11,6

     mov      znmnog,'+'

     jmp      fin

notequal:

     mov      al,znB

     mov      znC,al

     raznost  manb,mana,manc

     Set_Kur  08,21

     Op_Out   znc,manc,11,6

          mov      al,zna

     mov      znc,al

     summa    mana,manb,manc

      Set_Kur  09,21

      Op_Out   znc,manc,11,6

     mov      znmnog,'-'

     jmp      fin

AequalB:

     mov      al,zna

     mov      bl,znb

     cmp      al,bl

     jne      @1

      jmp     @2

@1:

    jmp      notequal2

@2:

     mov      al,zna

     mov      znc,al

    summa    mana,manb,manc

    Set_Kur  08,21

     Op_Out   znc,manc,11,6

      mov      znc,'+'

          nul      manc,11

          Set_Kur  09,21 

         Op_Out   znc,manc,11,6

     mov      znmnog,'+'

          jmp      fin

notequal2:

      mov      znc,'+'

       nul      manc,11

          Set_Kur  08,21

          Op_Out   znc,manc,11,6

          mov      al,zna

          mov      znc,al

      summa    mana,manb,manc

          Set_Kur  09,21

          Op_Out   znc,manc,11,6

          mov      znmnog,'-'

          jmp      fin

fin:

          mnog     mana,manb

        set_kur  10,21

        op_out   znmnog,manmnog,20,10 

nxt4:

        Set_Kur  25,00

        Pause

        cmp      al,79h            ;продолжение работы (y) ?

        jne      nxt6

        jmp      Starter

nxt6:

        cmp      al,6eh            ;окончание работы (n) ?

         jne      nxt4

        Set_Kur  23,20

        Scr_Out  mes2

       Set_Kur  25,00

         Pause

          End_Task

          CODSEG ENDS

          END      Start

 

 

5. Результати виконання програми:

 

Рисунок 1.Перший екран програми. 

Рисунок 2.Третій екран програми. Введення значень цілої та дробової частини числа

Рисунок 3.Четвертій екран програми. Введення та результат обчислення 
 
 
 
 
 
 

 

Висновки

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

      Недоліком даної програми є:

  1. Те, що коли користувач неправильно ввів одну цифру числа, то щоб змінити її він повинен заново ввести все число.
  2. Те що при введенні числа програма ігнорує натискання непередбачених клавіш і не сповіщає про це користувача.

 

Використані джерела:

  1. Питер Абель  “Асемблер и программирование для IBM PC”
  2. Роберт Журден «Справочник програмиста на персональном компьютере фирмы IBM»
  3. Рудаков П.И., Финогенов К.Г. «Програмируем на язике ассемблер IBM PC»
  4. Юров В.И. “Assembler” учебник для ВУЗов.
  5. Конспект лекцій з системного програмування.
  6. Електронний довідник TechHelp.

Информация о работе Модель арифметико-логічного пристрою