Программа преобразования двухбайтового числа в десятичное число без учета знака

Страницы работы

Содержание работы

Федеральное государственное

 образовательное учреждение

высшего профессионального образования

«Сибирский федеральный университет»

Институт инженерной физики и радиоэлектроники

Кафедра «Радиотехника»

Лабораторная работа №1

Вариант 20

Преподаватель                                            ___________        М.М Мичурина

Студент ,гр. РФ0613                                   ___________        А.С Сидоренко

Красноярск 2009.


Цель работы: Знакомство со структурой программы при программировании на языке ассемблера для персональных компьютеров, компилирование программы, отладка с помощью программы TURBO DEBUGER.

Задание: Написать программу преобразования двухбайтового числа в десятичное число без учета знака.

Блок схема программы


Листинг программы

;Написать программу преобразования двухбайтового числа в десятичное число без учета знака

TITLE lab_1

IDEAL

P386

SEGMENT _stack para stack use16 'stack'

db 100h dup(?)

ENDS _stack

SEGMENT _data para public use16 'data'

a dw 31587; инициализация двух байтного числа а

b db 9  dup(?); инициализация шестиэлементного массива

ENDS _data

SEGMENT _code para public use16 'code'

ASSUME CS:_CODE, DS:_data, SS:_stack

proc delen

push 1                  ; запись в стек числа 1   (для одноразрядного числа)

push 10                ; запись в стек числа 10 (для двухразрядного числа)

push 100             ; запись в стек числа 100 (для трехразрядного числа)

push 1000           ; запись в стек числа 1000 (для четырехразрядного числа)

push 10000         ; запись в стек числа 10000 (для пятиразрядного числа)

mov si,0               ; инициализация индексного регистра si числом 0

mov ax,[a]           ; запись в регистр ax исходного числа a

cycle:                                                ; организуем цикл для выделение разрядов

pop bx                 ; запись в регистр bx верхнего элемента стека

div bx                  ; деление вида (ax:dx):=ax/bx, где в ax - целая, в dx - дробная часть

add al,'0'      ; прибавляем в al значение символа 0 в ascii

mov [b+si],al      ; запись в si-й элемент массива b целой части деления   

cmp dx,0             ; если дробная часть равна 0, то...

je  conec              ; ...переход к концу программы

mov ax,dx           ; запись в ax содержимого dx, т. е. дробной части деления

xor dx,dx             ; очистка dx

inc si                    ; увеличение si на 1

inc si                    ; увеличение si на 1

jmp cycle            ; переход к началу цикла

conec:                  ret             ; завершение подпрограммы возврат в DOS

endp delen

proc main

mov       ax,_data

mov       ds,ax                    ; инициализация сигментного регистра ds

mov       ax,_stack

mov       ss,ax                     ; инициализация стека

call delen

mov       [b+9],'$'

lea          dx,[b]                   ; получения адреса dx

mov       ax,0900h             ; вывод на экран при помощи функции 0900h строки которая оканчивается на $ 

int          21h

mov       ax,4c00h             ; стандартная функция прерывания

int          21h                                     

endp main

ENDS _code

END main                          ; завершение программы и точкой входа main

После написание программы в текстовом редакторе приступаем к ассемблированию компоновки и выполнению программы для это создаем файл с расширении .bat и пишем в нем следующие:

echo off

cls

G:\MAKET\tasm.exe lab_1.asm

pause

G:\MAKET\tlink.exe lab_1.obj

pause

g:\maket\td lab_1.exe

Похожие материалы

Информация о работе

Предмет:
Радиотехника
Тип:
Отчеты по лабораторным работам
Размер файла:
176 Kb
Скачали:
0