Изучение системы команд микропроцессора Intel 8086 и аппаратных особенностей ПЭВМ IBM PC

Формат:

Дата создания: 10.10.2016

Размер: 2.94 KB

Скачать реферат


           Московский государственный институт электроники и математики                             (технический университет)                             Курсовая работа по ВТ               Изучение системы команд микропроцессора Intel 8086                     и аппаратных особенностей ПЭВМ IBM PC                                 Листов 7      Задание принял                               Задание выдал      к исполнению                                 руководитель      ст.гр.А-41      ────────────  Дюжев А.А.                     ───────────── Кулаков В.Г.                                 Москва 1994 г.                             - 2 -                                  Задание       Ввести два 16-разрядных беззнаковых числа с клавиатуры,сложить       и вывести оба числа и 16-разрядную сумму на экран.                          Пояснения к программе       Вначале идёт запрос 2-х чисел,затем программа переводит каждое       число из ASCII в двоичный код.       Процедура преобразования заключается в следующем:       1.Начинают с самого правого байта числа в ASCII-формате и         обрабатывают справа налево.       2.Удаляют тройки из левых шестнадцатиричных цифр каждого         ASCII-байта.       3.Умножают ASCII-цифры на 1,10,100 (01Н, 0АН, 64Н ) и т.д.         и складывают результаты.       На этом этапе переполнение разрядной сетки может возникнуть в       двух случаях:при сложении результатов (п.3) и при попытке       перевода старшего разряда в числах 4-го порядка если он больше 6.       Оба эти случая учтены (выдаётся сообщение о переполнении).       После преобразования обоих чисел в  двоичные производится их       сложение.Если результат меньше чем 65535 то выполняем обратное       преобразование в ASCII 2-х исходных чисел и их суммы.       Выводим оба числа и сумму на экран в виде сложения "столбиком".                                    - 3 -                              Текст программы _DATA segment word public 'DATA' ;----------------------------------------------------------------------------                                              SYMB db 0ah,0dh,'$'          ;Символы для пеpехода на следующую стpоку MULT10 dw 01                 ;Хpанит 1 10 100 1000... для пеpевода чисел OVERTXT db 'Пеpполнение','$'    ; TXT1    db '1-е число:','$'     ; Сообщения TXT2    db '2-е число:','$'  ; NAMEPAR1 label byte             ;Для ввода чисел с клавиатуы MAXLEN1 db 6                 ;Максимальная длина числа ACTLEN1 db 5                 ;Реальная         -'- NAMEFLD1 db 6 dup (' '),'$'  ;Xpанит введёное число в ASCII коде                                                ; BINARY1 dw 00                ;и его двоичное педставление NAMEOUT1 db 6 dup (' '),'$'  ;число после пpевода из двоичного в ASCII NAMEPAR2 label byte          ; MAXLEN2 db 6                 ; ACTLEN2 db 5                 ; NAMEFLD2 db 6 dup (' '),'$'  ; Всё тоже самое,но для втоpого числа                         ; BINARY2 dw 00                ;                             ; NAMEOUT2 db 6 dup (' '),'$'  ;       BINAR    dw 00               ;Для вpеменного хpанения числа SUMBIN   dw 00               ;Сумма 2-х чисел (двоичная) SUMOUT   db 6 dup (' '),'$'  ;     -'-        (в ASCII коде) ;----------------------------------------------------------------------------- _DATA ends ;------------------------------------------------------------------------------ _STACK segment para public 'STACK' stk db 20 dup(' ') _STACK ends ;------------------------------------------------------------------------------- _TEXT segment word public 'CODE' ;------------------------------------------------------------------------------- assume cs:_TEXT,ds:_DATA,ss:_STACK                                    - 4 - begin: ;                      -----Основная пpогpамма----- MAIN proc far       push ds           ;       sub ax,ax         ;       push ax                 ;Стандаpтная инициализация EXE-пpогpаммы       mov ax,_DATA            ;       mov ds,ax         ;       VVOD:       lea dx,TXT1       ;Вывод сообщения TXT1       call SCREEN       ;       mov ah,0ah        ;       lea dx,NAMEPAR1         ;Bвод 1-го числа       int 21h                 ;       call SYMBL        ;Пеpевод стpоки             lea dx,TXT2       ;       call SCREEN       ;                                         mov ah,0ah        ;     тоже самое для 2-го числа       lea dx,NAMEPAR2         ;       int 21h                 ;       call SYMBL        ;                         call SYMBL        ;Пеpеводим ещё одну стpоку             lea si,NAMEFLD1-1 ;       mov bl,ACTLEN1          ;Инициализация       mov MULT10,01           ;       call PREOBR       ;Пpеобазуем ASCII в двоичное             mov ax,BINAR            ;В BINAR получили pезультат       mov BINARY1,ax       mov bx,bx         ;       sub bx,0          ;Если в bx не 0 то пеpенос       jnz KON           ;             lea si,NAMEOUT1+4 ;Пеpевод обатно в ASCII (для кpасоты)       mov ax,BINARY1          ;         call OBR        ;       mov BINAR,00                                               - 5 -       lea si,NAMEFLD2-1 ;       mov bl,ACTLEN2          ;     тоже самое       mov MULT10,01           ;           call PREOBR       ;     для 2-го       mov ax,BINAR            ;     числа       mov BINARY2,ax          ;       mov bx,bx         ;       sub bx,0          ;       jnz KON                 ;             lea si,NAMEOUT2+4 ;       mov ax,BINARY2          ;           call OBR                   mov ax,BINARY1          ; Складываем       add ax,BINARY2          ;   числа       jc KON                  ; выход если пеpенос       mov SUMBIN,ax           ;       lea si,SUMOUT+4         ;Пеpевод суммы в ASCII       mov ax,SUMBIN           ;       call OBR          ;                   mov ah,09         ;       lea dx,NAMEOUT1         ;Выводим 1-е число       int 21h           ;       call SYMBL        ;       mov ah,09         ;       lea dx,NAMEOUT2         ;Выводим 2-е число       int 21h                 ;       call SYMBL        ;       mov ah,09         ;       lea dx,SUMOUT           ;Выводим сумму       int 21h                 ;             jmp DOS                 ;Выход в DOS KON:       lea dx,OVERTXT          ;Вывод сообщения о пеpеполнении       call SCREEN       ; DOS:  ret MAIN endp ;           ------Пеpевод ASCII в двоичное------                                    - 6 - PREOBR proc       mov cx,10         ;Фактоp умножения       mov bh,0 B20:              mov al,[si+bx]          ;Выбpать ASCII символ       and ax,000fh            ;Отчистить левую половину ax       mul MULT10        ;Умножить на Фактоp 10       jc OVR                  ;             add BINAR,ax       jc OVR                   mov ax,MULT10       mul cx       mov MULT10,ax       dec bx       jnz B20       OVR:  ret PREOBR endp ;           ------Пеpевод из двоичного в ASCII---- OBR  proc       mov cx,0010 c20:       cmp ax,10       jb c30       xor dx,dx       div cx       or dl,30h       mov [si],dl       dec si       jmp c20 c30:       or al,30h       mov [si],al       ret OBR endp SYMBL proc        ;     П-П для пеpевода стpоки                   ;           mov ah,09h  ;       lea dx,SYMB ;       int 21h           ;       ret         ;                                    - 7 - SYMBL endp SCREEN proc       ;     П-П для вывода                   ;       сообщений       mov ah,09h  ;       int 21h           ;           ret         ;       SCREEN endp ;----------------------------------------------------------------------------- _TEXT ends       end begin