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


Информация о работе « Программа перевода десятичного числа в двоичную и шестнадцатеричную системы счисления»
Раздел: Информатика, программирование
Количество знаков с пробелами: 14569
Количество таблиц: 0
Количество изображений: 0

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

Скачать
95849
35
321

... 100 10 1001=(9)10 100 11,1=(3,5)10 00 110 00 100 001 100 000 100 10 0 10 00 Таким образом, выполнение арифметических операций в двоичной системе счисления достаточно просто. Особенно просто выполнять операции сложения, вычитания и умножения. Благодоря этому, применение двоичной системы в вычислительных ...

Скачать
225204
6
0

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

Скачать
225314
2
0

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

Скачать
15528
6
1

... и дробных разрядов. Так, например, сокращенной записи числа 737.25 соответствует его значение, вычисленное согласно равенству (1. 1): 737.25 =7 · 102 + 3 · 101 + 7 · 100 + 2 · 10-1 + 5 · 10-1. В двоичной системе счисления для представления чисел используются две цифры: 0 и 1. Действуя согласно с (1.1), значение двоичного числа, например, 11110010. 0110 можно представить в следующем виде: ...

0 комментариев


Наверх