Ассемблер                          
		Ассемблер                          
Волжский университет имени В.Н.Татищева 
Факультет “Информатика и телекоммуникации” 
Кафедра “Информатика и системы управления” 
КУРСОВАЯ РАБОТА 
по дисциплине: “Организация ЭВМ ” 
Тема: “Ассемблер” 
Выполнил: студент гр. ИС-311 
Руководитель:  
Тольятти 
Содержание курсовой работы: 
1. Описание и схема алгоритма. 
2. Область применения. 
3. Листинг программы с комментариями. 
4. Список литературы. 
1. Описание и схема алгоритма 
Начало программы начинается с распределения памяти под код программы под данные и под стек. Прописав строку Model Small выделяется по 64кБ под данные и под код. В задании нам необходимо работать с 32-х битными переменными для чего прописываем строку .386.  
Определившись с основными моментами начинаем ввод переменных. Переменной является x.  
Ввод переменной x и обработка осуществляется в несколько этапов. Вначале вводится код числа стандартным прерыванием int 21 функцией 0Ah, замет берётся каждый символ и преобразуется в десятичное значение и осуществляется определение десятков или единиц соответственно. В результате получаем введённое нами десятичное число. 
Следующим этапом является вычисление полинома по формуле у=2* x-6y- 4. Во-первых возводим в квадрат “x”, затем умножаем на 2. Потом суммируем полученные значения и помещаем в переменную у, которая и является ответом данной задачи. 
Завершающей стадией программы являются вывод переменной у и завершение программы. Вывод переменной осуществляется функцией outword, которая содержится в подключаемом модуле io.asm. Подключение данного модуля осуществляется командной include прописываемая до кода программы. Завершение программы осуществляется стандартным способом по стандартному DOS-кому прерыванию int 21 функцией 4Сh.  
 
Рис. 1. Схема алгоритма. 
Модуль ввода-вывода Io.asm. 
Вначале рассмотрим схему хранения операций ввода-вывода (ВВ) и подключения их к программам: 
Часть операций ввода-вывода реализована в виде процедур, описания которых собраны в отдельном модуле, хранящемся в файле с именем ioproc.asm (текст модуля приведён ниже). Предполагается, что этот модуль заранее оттранслирован и в виде объектного модуля записан в файл с именем ioproc.obj. 
Изменения стека во время прогона программы 
Стек в данной программе при выводе переменной у нам необходимо было освободить 6 байт стека для вывода числа.  
SP -указатель стека. SS - стек. 
Приведём пошаговое изменение стека: 
SP: 00F0 SS: 00F2 0000 
SS: 00F0 3530 
SP: 00F2 SS: 00F4 13BA 
SS: 00F2 0000 
SP: 0F4 SS: 00F6 0000 
SS: 00F4 13BA 
SP: 00F6 SS: 00F8 00C9 
SS: 00F6 0000 
SP: 00F8 SS: 00FA 1645 
SS: 00F8 00C9 
SS: 00FE 0924 
SP: 0100 SS: 0102 02B4 
SS: 0100 5052 
2. Область применения. 
Программа применяется для расчета полинома у=2* x-6y- 4. Программа имеет ограничения в применении, потому что в ней применяется расчет одного значения и по одному алгоритму. 
3. Листинг программы: 
model small 
include io.asm 
.data 
vvx db 10,13,'Введите x: ','$' 
vvy db 10,13,'Введите y: ','$' 
otvet db 10,13,'Ответ : ','$' 
x db 0 
two dd 2 
four dd 4 
six dd 6 
z dw 0,0 
.stack 256 
.386 
.code 
main: 
;*********-начало программы-******************************** 
 mov dx,@data ;начальный адрес в сегмент данных 
 mov ds,dx 
;*********-Вывод строки-************************************* 
 mov dx,offset vvx 
 mov ah,9h ;Вывод строки 'Введите x' 
 int 21h 
;********-Ввод числа-**************************************** 
 mov ah,1h 
 int 21h 
 sub al,30h 
 push ax 
;*********-Вывод строки-************************************* 
 mov dx,offset vvy 
 mov ah,9h ;Вывод строки 'Введите y' 
 int 21h 
;********-Ввод числа-**************************************** 
 mov ah,1h 
 int 21h 
 sub al,30h 
 push ax  
;**********-Расчёт полинома-*********************************** 
 pop ax 
 xor ah,ah 
 mov bx,word ptr (six+2) 
 mul bx  ;dx,ax=y*6 
 mov cx,dx 
 mov bx,ax  
 pop ax 
 xor ah,ah 
 mov x,al 
 mul x ;ax=al*al 
 ;xor cx,cx  
 mov dx,word ptr (two+2) 
 mul dx ;dx,ax:=2*al 
 sub ax,bx    
 sbb dx,cx 
 ;Результат DX,AX  
 xor cx,cx 
 mov bx,word ptr (four+2) ;dx = Результат 
 sub ax,bx    
 sbb dx,cx 
 ;Результат DX,AX 
 mov z,dx 
 mov z+2,ax 
;**********-Завершение работы программы-********************** 
 mov dx,offset otvet ;Вывод сообщения "Ответ" 
 mov ah,9h 
 int 21h 
 outword z ;Процедура вывода 
 outword z+2  
 mov ax,4c00h 
 int 21h 
 end main 
4.Список литературы: 
Ефремов В.Д., Мелехин В.Ф., Дурандин К.П. и др. Вычислительные машины и системы. Учебник для вузов - 2М.: Высшая школа, 1994. 
Ларионов А.М., Майоров С.А., Новиков Г.И. Вычислительные комплексы, системы, сети.// Учебник для вузов. - Л.: Энергоатомиздат, 1987. 
Григорьев В.Л. Микропроцессор i486. Архитектура и программирование. -М.: БИНОМ, 1993 
	
	
					
							 |