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


Полнотекстовый поиск по базе:

Главная >> Реферат >> Информатика, программирование


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




Содержание

  1. Введение

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

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

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Например:

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

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

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

LDA (LOAD DIRECT

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

;��Žƒ�€ŒŒ€ �…�…‚Ž„€ „…‘Ÿ’ˆ—�ŽƒŽ —ˆ‘‹€ ‚ ;„‚Žˆ—�“ž ˆ ˜…‘’�€„–€’…�ˆ—�“ž ‘ˆ‘’…Œ› ;‘—ˆ‘‹…�ˆŸ
.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



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