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

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

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

Информация

Компьютеры, программирование

Другие материалы по предмету

Компьютеры, программирование

Сдать работу со 100% гаранией
ом этапе может быть создан листинг программы. Файл с расширением *.LST, в котором содержится основная информация о программе, а так же Файл перекрёстных ссылок с расширением *.CRF. На этом этапе происходит проварка текста программ на наличие ошибок. Ассемблирование осуществляется при помощи программы транслятора TASM.EXE (ASM.EXE в ассемблере, MASM.EXE - в макроассемблере). TASM [опции] *.ASM [,,] - команда для выполнения трансляции. Если в команде указана одна запятая, то Файл листинга Формируется. В TASM имеются две опции: /ZI и /N. Они вызываются: ТАSМ.
  • Компоновка. На этом этапе создается перемещаемая программа способная загружаться а любую область памяти. Сохраняется в Файле с расширением *.ЕХЕ или *.СОМ. Для этого используется TLINK.exe (для макроассемблера LINK.EXE). Имеются опции: /Т и /X.
  • Выполнение и отладка (DEBUG).
  • Занесение машинного кода программы в ПЗУ (может отсутствовать) Теперь мы посмотрим блок-схему нашей программы, то есть упорядоченные действия.
  •  

     

     

     

     

     

     

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

    .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:

    movdh,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:

    movdl,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. Илюшечкин В.Н., Костин А.Е, Хохлов М.М. “Системное программное обеспечение“, М
    Лучшие

    Похожие работы

    < 1 2 3 >