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

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

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

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

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

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

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

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

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 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,<операнд>


Страница: