Федеральное государственное
образовательное учреждение
высшего профессионального образования
«Сибирский федеральный университет»
Институт инженерной физики и радиоэлектроники
Кафедра «Радиотехника»
Лабораторная работа №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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.