RSS    

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

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                  20h dup(?)

        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, "$"

buf db 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      – загрузить ЕА

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

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


Страницы: 1, 2


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.