Реферат: Программа перевода десятичного числа в двоичную и шестнадцатеричную системы счисления

 

Содержание

1.   Введение          

2.   Общиесведения о языке ассемблер

3.   Программнаячасть

·    Описаниепрограммы

·    Этапыразработки ассемблерных программ                           ___

·    Программаперевода десятичного числа в двоичную и шестнадцатеричную системы счисления

4.   Списоклитературы


 

Введение

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

Всостав аппаратной части входят такие устройства как:

·    центральныйпроцессор;

·    оперативнаяпамять;

·    периферийныеустройства;

Всевышеперечисленные  устройства  построены на интегральных схемах (ИС).

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

ПримеромИС являются схемы цифровых устройств:  регистры, сумматоры, полусумматоры,счетчики, шифраторы, дешифраторы и т.д.

Кпрограммной части относятся: совокупность программ и правил со всей относящейсяк ним документацией,  позволяющая использовать вычислительную машину длярешения различных задач.

Программа- законченная последовательность машинных команд или операторов языкапрограммирования, определяющая последовательность действий для решениянекоторой задачи.

Задачейв нашей работе является: преобразование трехразрядного десятичного числа вдвоичную и шестнадцатеричную системы счисления. Задача эта реализуется спомощью языка ассемблера. В этом низкоуровневом языке используютсясимволические (мнемонические) обозначения машинных команд и адресов. Преимуществом этого языка является:  во-первых, то что, программы, написанныена нем, требуют значительно меньшего обьема памяти;  во-вторых, знание этогоязыка и результирующего машинного кодадает представление архитектуры машины, что вряд ли обеспечивается при работе наязыке програмирования высокого уровня.


Общие сведения о языке ассемблера

            Символическийязык ассемблера позволяет в значительной степени устранить недостаткипрограммирования на машинном языке.

            Главным егодостоинством является то, что на языке ассемблера все элементы программыпредставлены в символической форме. Преобразование символических имен команд вих двоичные коды возлагаются на специальную программу – ассемблер, котораяосвобождает программиста от трудоемкой работы и исключает неизбежные при этомошибки.

            Символические имена, вводимые припрограммировании на языке ассемблера, как правило отражают семантику программы,а аббревиатура команд – их основную функцию. Например: PARAM – параметр, TABLE –таблица, MASK– маска, ADD – сложение, SUB – вычитание и т.д.п. Такие имена легко запоминаются программистом.

            Для программирования наязыке ассемблера необходимо иметь сложные инструментальные средства, чем припрограммировании на машинном языке: нужны вычислительные комплексы на баземикро – ЭВМ или ПЭВМ с комплектом периферийных устройств (алфавитно-цифроваяклавиатура, символьный дисплей, НГМД и печатающее устройство ), а такжерезидентные или кросс-системы программирования для необходимых типовмикропроцессоров. Язык ассемблера  позволяет эффективно писать и отлаживатьзначительно более сложные программы, чем машинный язык (до 1 — 4 Кбайт ).

            Языки ассемблера являютсямашинно-ориентированными, т. е. зависимыми от машинного языка и структурысоответствующего микропроцессора, так как в них каждой команде микропроцессораприсваивается определенное символическое имя.

            Языки ассемблера обеспечивают существенное повышениепроизводительности труда программистов по сравнению с машинными языками и в тоже время сохраняют возможность использовать все программно-доступные аппаратныересурсы микропроцессора. Это дает возможность квалифицированным программистамсоставлять программы, выполняемые за более короткое время и занимающие меньшийобъем памяти по сравнению с программами, создаваемыми на языке высокого уровня.

            В связи с этим практическивсе программы управления устройствами ввода/вывода(драйверы ) пишутся на языке ассемблера не смотря на наличие достаточно большойноменклатуры языков высокого уровня.

            С помощью языкаассемблера программист может задать следующие параметры:

            мнемонику ( символическоеимя ) каждой команды машинного языка микропроцессора;

            стандартный формат длястрок программы, описываемой на ассемблере;

            формат для указанияразличных способов адресации и вариантов команд;

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

                псевдокоманды,управляющие процессом ассемблирования (трансляции) программы.

            На языке ассемблера программазаписывается построчно, т. е. для каждой команды отводится одна строка.

            Для микро – ЭВМ,построенных на базе наиболее распространенных типов микропроцессоров, можетсуществовать несколько вариантов языка ассемблера, однако практическоераспространение обычно имеет один – это так называемый стандартный языкассемблера. В дальнейшем мы будем рассматривать именно стандартные языкиассемблера.

            Каждая строка написаннойна языке ассемблера программы содержит четыре поля:

       МЕТКА  КОД    ОПЕРАНД   КОММЕНТАРИЙ

            Поле МЕТКА не являетсяобязательным, оно помечает адрес той ячейки памяти, в которой размещен первыйбайт отмеченной команды. Метки используются в качестве адресов перехода командпередачи управления, и благодаря их наличию программист может не оперироватьабсолютными адресами, а использовать символические адреса, что значительноудобнее. Метка может иметь длину от одного до шести символов, первым из которыхдолжна быть буква. Во многих ассемблерах допускается использование меток любойдлины, но распознаются только первые шесть символов. Метка не должна содержатьпробелов и знаков пунктуации. В некоторых ассемблерах за последним символомметки должно следовать двоеточие.

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

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

Например:

            MOV   (MOVE)                                  -передать, переслать

            ADD   (ADDITION)                           -сложение

            SUB    (SUBSTRACT)                     -вычитание

            LDA    (LOADDIRECT

                         ACCUMULATOR)               -непосредственнаязагрузка

            INR     (INSCREMENT                                аккумулятора

 REGISTER)                         -инкрементрегистра

            DCR   (DECREMENT

 REGISTER)                         декрементрегистра

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

            Поле ОПЕРАНД определяетсяобычно в зависимости от поля кода команды. Оно может содержать либо один, либонесколько операндов, разделенных запятыми, либо не содержать ни одного операндадля тех команд, которые оперируют внутренними рабочими регистрами.

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

            Простейшие операндысодержат одно мнемоническое обозначение или одну константу.

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

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

Программная часть

Описание программы

В этой работе мы рассмотрим один изспособов перевода числа из десятичной системы исчисления в двоичную ишестнадцатеричную с помощью языка Ассемблера. Прежде чем создавать программу,детально рассмотрим, какие шаги для этого надо предпринять, то есть другими словаминапишем алгоритм решения нашей задачи. Для того чтобы компьютер могобрабатывать данные, эти данные ему надо ввести, а значит первым шагом врешении нашей задачи будет ввод числа. Вторым шагом в работе будет выводсообщения о введеном числе. После этого мы переводим десятичное число вдвоичную систему и выводим наше число в двоичном эквиваленте на экран.Следующим шагом будет перевод числа в шестнадцатеричный эквивалент и последнийшаг это цикл который позволяет продолжить ввод нового десятичного числа. Теперьсоберём все пункты вместе:

1.   Ввод числа с клавиатуры.

2.   Вывод сообщения о введеном числе.

3.   Перевод числа в двоичный эквивалент.

4.   Вывод на экран двоичного числа.

5.   Перевод числа в шестнадцатеричнуюсистему.

6.   Вывод на экран шестнадцатеричногочисла.

7.   Цикл (продолжим?) если ДА то пункт 1, иначе пункт 8

8.   Выход из программы.

Это и есть алгоритм программы наестественном языке. 

этапы разработки ассемблерных программ

1.                Постановка задачи.Включает в себя содержательное описание задачи и разработку алгоритма.

2.                Разработка текстапрограмм.

3.                Ввод текста вкомпьютер. Текст программы в мнемокодах вводится в ЭВМ при помощи любоготекстового редактора. Так же при этом создает ся текстовый Файл с расширением*.ASM .

4.                Компиляция илиассемблирование. Осуществляется преобразование текстового Файла с расширением*.ASM в объектный Файл, содержащийпрограмму в машинном коде с расширением *.OBJ. Так же на этом этапе может быть создан листингпрограммы. Файл с расширением *.LST,в котором содержится основная информация о программе, а так же Файлперекрёстных ссылок с расширением *.CRF.На этом этапе происходит проварка текста программ на наличие ошибок.Ассемблирование осуществляется при помощи программы транслятора TASM.EXE (ASM.EXE – в ассемблере, MASM.EXE — в макроассемблере). TASM [опции] *.ASM [,,] — команда для выполнения трансляции. Если в командеуказана одна запятая, то Файл листинга Формируется. В TASM имеются две опции: /ZI и /N.Они вызываются: ТАSМ.

5.                Компоновка. На этом этапе создается перемещаемая программа способная загружатьсяа любую область памяти. Сохраняется в Файле с расширением *.ЕХЕ или *.СОМ. Дляэтого используется TLINK.exe (для макроассемблера LINK.EXE). Имеются опции:/Т и /X.

6.                Выполнение иотладка (DEBUG).

7.                Занесениемашинного кода программы в ПЗУ (может отсутствовать) Теперь мы посмотримблок-схему нашей программы, то есть упорядоченные действия.


;ПРОГРАММАПЕРЕВОДА ДЕСЯТИЧНОГО ЧИСЛА В ;ДВОИЧНУЮИ ШЕСТНАДЦАТЕРИЧНУЮ СИСТЕМЫ ;СЧИСЛЕНИЯ

.MODEL small

.STACK 64

.DATA

; Сегментданных

;____________________________________________________________________

; Таблица преобразования “цифра– ASCII-код

        org                      100h

        tabl_ascii  db                 '0123456789abcdef'

;____________________________________________________________________

; Таблица преобразования “ASCII-код- цифра

        org                      130h

        db                        0,1,2,3,4,5,6,7,8,9

        org                      41h

        db                        0ah,0bh,0ch, 0dh, 0eh, 0fh

;____________________________________________________________________

; Резервация и инициализацияпеременных в памяти

        org                      150h

        x_ascii     db                  20hdup(?)

        t1            db      0dh,0ah,«Введите число и нажмите Enter»

                       db        0dh, 0ah, "$"

        t2             db      0dh,0ah,«Вы ввели число”,0dh,0ah»$"

        t3            db      0dh, 0ah, «В двоичной системе оно выглядет так»

                       db        0dh,0ah,"$"

        t4            db      0dh, 0ah, «В шестнадцатеричной так»

                        db       0dh, 0ah, "$"

bufdb 16 dup(?),"$"

        t5            db      0dh,0ah, «Будем продолжать процесс?(Y/N)?»

                       db        0dh,0ah,"$"

;____________________________________________________________________

 

;Сегменткодов

.CODE

; Главная процедура 

  g_k proc

       mov                     ax,@data

       mov                     ds, ax

        mov                                es, ax

  d:  lea                     dx, t1

       mov                     ah,09h

        int                        21h

       lea                       di, x_ascii

       call                     ink

       call                     des_2

       push                  ax

       lea                       dx,t3

       mov                     ah,9h

        int                        21h

       pop                    ax

       call                     bin_dis

        push                              ax

       lea                       dx,t4

       mov                     ah,9h

       int                        21h

        pop                                ax

       call                      outhex

       lea                       dx,t5

       mov                     ah,9h

       int                        21h

       mov                     ah,1h

       int                        21h

        cmp                     al,«Y»

        loope                  d

        cmp                                 al,«y»

        loop                                d

        mov                                 ah,4ch

        int                        21h

  g_k endp

  ink proc

; Процедура ввода десятичногочисла 

        xor                      cx,cx

  l1:

        mov                    ah,1

        int                                    21h

        stosb

        inc                                   cx

        cmp                                 al,0dh

        jnz                                   l1

        dec                                  cx

        ret

  ink endp

  dis proc

 ; Процедура вывода на экрандесятичного числа 

  r1: mov                                dl,[di]

        mov                                 ah,2

        int                        21h

        inc                       di

        loop                                r1

        ret

  dis endp

  des_2 proc

;Переводчисла(десятичного) в двоичную систему

        mov                     si,10

        lea                       di,x_ascii

        sub                     ax,ax

  v1: mul                    si

        mov                     bp,ax

        mov                     al,[di]

        sub                     al,48

        inc                       di

        mov                    ah,ch

        add                     ax,bp

        loop                    v1

        ret

  des_2 endp

  bin_dis proc

 ; Процедура вывода на экрандвоичного числа

        lea                       di,buf

        mov                     cx,16

        mov                     bx,ax

        mov                    dx,ax

conv:

        mov                    al,ch

        shl                       dx,1

        adc                     al,'0'

        stosb      

        loop                    conv

        mov                     ah,9h

        lea                       dx,buf

        int                        21h

        mov                    ax,bx

        ret

  bin_dis endp

;Процедураперевода числа(двоичного)в шестнадцатеричную

;ивывод его на экран

outhex:

mov                ch,al

            mov                al,ah

            mov                ah,2

            call                 prnbh

            mov                al,ch

prnbh:

            mov                 dh,al

            shr                 al,1

            shr                 al,1

            shr                 al,1

            shr                 al,1

            call                 prnd

            mov                al,dh

            and                al,15

prnd: 

or                    al,48

            cmp                al,58

            jc                     prnc

            add                al,7

prnc: 

mov                 dl,al

            int                   33

            ret

           

  end g_k

Примечания:

Ниже привединыкоманды использовались в программе:

    sub     – двоичное вычитание. Вычитаетсяиз первого операнда содержимое второго  операнда

Мнемоника:    sub<операнд1>,<операнд 2>

call      – вызов процедуры. Передает управлениепроцедуре адрес которой задан операндом, после завершения процедуры, выполнениепродолжается командой следующей за командой call

Мнемоника:    call<имяпроцедуры>

ret       – возврат к процедуре

shr      – сдвинуть логическивправо

xor      – исключающее ИЛИ

Мнемоника:    xor<операнд 1>,<операнд 2>

lea      – загрузить ЕА

Мнемоника:    leareg,<операнд>

push   – включить в stack

Мнемоника:    push<операнд>

pop     – извлечь из stack

Мнемоника:    pop<операнд>

mov    – переслать

Мнемоника:    mov<приемник>,<источник>

inc      – увеличение на 1

Мнемоника:    inc<операнд>

dec     – уменьшение на 1

Мнемоника:    dec<операнд>

stosb – пересылает соединениярегистра al или ax накоторый указывает регистр di

loop    – команда организации цикла со счетчиком,также короткие переходы (127б)  команда уменьшает значение счетчика cx, без изменениякаких-либо флагов, если соединение cx >0, то осуществляетсяпереход на заданную метку, в противном случае цикл завершается.

Мнемоника:    loop <метка>

.CODE                – открывает сегменткода

.DATA                 — открывает сегментданных

.STACK  N        –определяетсегмент stack(а); дерективы закрытиясегментов в этом случае не используются; N – показывает размер stack(a) в байтах

Примечание: при использованиитаких деректив регистр ds инициализируется следующим образом:                 mov                ax,@data

mov                ds,ax

assume в этом случае неиспользуется

Списоклитературы

1.  «Я зыкассемблера для IBM PC и программирования» Высшая школа 1992.

2.  «Персональный компьютер Фирмы IBM и операционная системаMS-DOS» Радио и связь 1991.

3.  ИлюшечкинВ.Н., Костин А.Е, Хохлов М.М. “Системноепрограммное обеспечение“,М ., “Высшая школа”,1987 г.

4.   НортонП., Соухэ Д. “Язык ассемблера для IBM PC”,М., Издательство “Компьютер”,1993

еще рефераты
Еще работы по информатике, программированию