Разработка программы на Assembler

Автор работы: Пользователь скрыл имя, 28 Января 2014 в 10:48, курсовая работа

Краткое описание

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

Прикрепленные файлы: 1 файл

Курсовая.doc

— 182.50 Кб (Скачать документ)

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

Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещений.

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

Счетчик адреса – специфический адрес операнда. Он обозначается

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

Базовый и индексный операнды. Этот тип операндов используется для реализации косвенной базовой, косвенной индексной или их комбинаций и расширений.

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

Арифметические  операторы. К ним относятся унарные  операторы «+» и «-», бинарные «+»  и «-», операторы умножения «*», целочисленного деления «/», получения остатка от деления «mod».

Операторы сдвига. Выполняют сдвиг выражения на указанное количество разрядов.

Операторы сравнения. (возвращают значение «истина» или «ложь») предназначены для формирования логических выражений (Таблица 1.1). Логическое значение «истина» соответствует цифровой единице, а «ложь» - нулю.

 

Таблица 1.1 – Операторы сравнения

 

Оператор

Значение 

eq

ИСТИНА, если выражение1 равно выражение2

ne

ИСТИНА, если выражение1 не равно выражение2

It

ИСТИНА, если выражение1 меньше выражение2

le

ИСТИНА, если выражение1 меньше или равно выражение2

gt

ИСТИНА, если выражение1 больше выражение2

ge

ИСТИНА, если выражение1 больше или равно выражение2


 

Логические  операторы выполняют над выражениями  побитовые операции. Выражения должны быть абсолютными, то есть такими, численное значение которых может быть вычислено транслятором.

Индексный оператор []. Скобки тоже являются оператором, и транслятор их наличие воспринимает, как указание сложить значение выражение1 за этими скобками с выражением2, заключенным в скобки.

Оператор переопределения  типа ptr применяется для переопределения

или уточнения  типа имя типа метки или переменной, определяемых выражением. Тип может  принимать одно из следующих значений: byte, word,

dword, qword, tbyte, noar, far. Оператор ptr позволяет непосредственно в команде переопределить тип и выполнить команду.

Оператор именования типа структуры «.» так же заставляет транслятор производить определенные вычисления.

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

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

 

    1. Коды ассемблера

 

1.3.1 Команды передачи управления

 

  • Call subr; вызов программы с именем subr;
  • Ret; возврат из  подпрограммы к оператору, следующему непосредственно за call;
  • JMP name; безусловный переход к команде с символическим именем name;
  • JA name или JBE name; переход, если, например, в результате сравнения cmp dst,src приемник по абсолютной величине больше источника, то перейти к метке name;
  • JB name; условный переход, если, например, в результате сравнения cmp dst,src приемник по абсолютной величине меьше источника, то перейти к метке name

 

1.3.2 Команды управления циклами

 

  • Loop name; эта команда неявно уменьшает (СХ) на 1 и осуществляет переход к метке name если (СХ) не равно 0.
  • Loopz; см.loop+проверка флага 0 (ZF)
  • Loopnz выход их цикла по «нулю»

 

1.3.3 Команды управления микропроцессором

 

  • Cls; сбросить флаг переноса(cf)
  • Stc; установить флаг переноса
  • Cmc; инвертировать флаг переноса
  • Cld; очистить флаг направления
  • Std; установить флаг направления
  • Sti; установить флаг прерываний(разрешить прерывания от внешних устройств)
  • Cli; сбросить флаг прерываний

 

1.3.4Команды прерываний

 

Int inum; эта команда вызывает программное прерывание, то есть переход к ячейке памяти с адресом, хранящимся в четырех байтах, начиная с адреса inum*4, где inum = (0..255). Это 4-х байтовое число является указателем подпрограммы обработчика данного прерывания, и иначе называется вектором прерывания. Таким образом первый килобайт памяти 256*4 отводится под векторы прерываний.

 

    1. ТЕХНИЧЕСКИЙ РАЗДЕЛ

 

    1. Задание:

 

Выводить через  каждую секунду системное время  в разных местах экрана разным цветом.

 

    1. Программа:

 

.model small; задает  механизм распределения под данные  и команды

.data ;начало сегмента данных

;----------------------Сегмент данных------------------------

M DB '@$' ;символ "@"

a db ?

b db ?

c db ?

x db,?

;---------------------Конец сегмента данных------------------

.code

;---------------------Мегмент кода---------------------------

begin:;метка начала

mov ax,@data ;загрузка  адреса сегмента данных а АХ

mov ds,ax ; пересылка  из ах в ds

;-----------------------Макрос-------------------------------

viv macro char ;макрос  вывода символа

push ax ;ах в  стек

push dx; dx в стек 

MOV AH,02 ;Запрос на установку курсора

MOV BH,a ;Экран 

MOV DH,b ;Строка 

MOV DL,c ;Столбец 

INT 10H ;обслуживание  адаптера vga

mov ah,06h; команда  вывода символа

mov dl,char ;загрузка  символа

int 21h;вывод символа

pop dx; вывод dx из стека

pop ax; вывод ах  из стека

endm; конец макроса

 

 

;----------------------------------------

mov x,0

cikl:

inc x

cmp x,14

jne go

mov x,0

go:

mov ah,0;загрузка  в ah команды задания видеорежима

int 1ah ; прерывание, обслуживающее системные часы ПК 

mov bx,dx ;пересылка  dx в bx

add bx,18 ;прибавляем 18 к bx

a1:;метка

int 1ah;прерывание, обслуживающее системные часы

cmp bx,dx; сравниваем bx и dx

jne a1;если не  равно переходим на а1

;-----------------------------------------------

MOV AX,0600H ;AH 06 (прокрутка), AL 00 (весь экран)

MOV BH,x ;цвет

MOV CX,0000 ;Верхняя  левая позиция

MOV DX,184FH ;Нижняя  правая позиция

INT 10h;обслуживание  адаптера vga

mov a,0;экран

mov b,1;строка

mov c,4;столбец

;1

viv m

inc c

viv m

inc c

viv m

inc c

viv m

;2

inc b

mov c,3

viv m

mov c,6

viv m

inc c

viv m

inc c

viv m

;3

inc b

mov c,2

viv m

mov c,5

viv m

mov c,8

viv m

inc c

viv m

;4

inc b

mov c,1

viv m

mov c,3

viv m

inc c

inc c

viv m

mov c,8

viv m

inc c

viv m

;5

inc b

mov c,1

viv m

mov c,4

viv m

mov c,8

viv m

inc c

viv m

;6

inc b

mov c,1

viv m

mov c,4

viv m

mov c,8

viv m

inc c

viv m

;7

inc b

mov c,1

viv m

inc c

viv m

inc c

viv m

inc c

viv m

mov c,9

viv m

inc c

viv m

;8

inc b

mov c,2

viv m

mov c,9

viv m

inc c

viv m

;9

inc b

mov c,2

viv m

mov c,8

viv m

inc c

viv m

;10

inc b

mov c,2

viv m

mov c,7

viv m

inc c

viv m

;11

inc b

mov c,7

viv m

inc c

viv m

mov c,11

viv m

inc c

viv m

;12

inc b

mov c,7

viv m

inc c

viv m

mov c,10

viv m

inc c

viv m

inc c

viv m

inc c

viv m

;13

inc b

mov c,6

viv m

inc c

viv m

mov c,9

viv m

inc c

viv m

mov c,13

viv m

inc c

viv m

;14

inc b

mov c,5

viv m

inc c

viv m

mov c,8

viv m

inc c

viv m

mov c,13

viv m

inc c

viv m

;15

inc b

mov c,5

viv m

inc c

viv m

mov c,8

viv m

inc c

viv m

mov c,13

viv m

inc c

viv m

;16

inc b

mov c,4

viv m

inc c

viv m

mov c,7

viv m

inc c

viv m

mov c,13

viv m

inc c

viv m

;17

inc b

mov c,4

viv m

inc c

viv m

mov c,7

viv m

inc c

viv m

mov c,12

viv m

inc c

viv m

;18

inc b

mov c,4

viv m

inc c

viv m

inc c

viv m

inc c

viv m

mov c,12

viv m

inc c

viv m

;19

inc b

mov c,5

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

;20

inc b

mov c,6

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

;21

inc b

mov c,7

viv m

inc c

viv m

mov c,14

viv m

;22

inc b

mov c,8

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

inc c

viv m

;23

inc b

mov c,9

viv m

inc c

viv m

inc c

viv m

inc c

viv m

 

klav:

mov ah,0bh

int 21h

cmp al,0ffh

je exit

jmp cikl

exit:

 

mov ah,4ch;команда  выхода из программы

int 21h;выход

end begin;конец  программы.

 

3 РАСЧЁТНЫЙ РАЗДЕЛ

 

    1.  Расчёт времени выполнения программы

 

Таблица 2 – Вычисление времени выполнения программы

 

№п.п

Операция

Время выполнения

Запуск программы(Срабатывание клавиши+время обработки кода клавиши микропроцессором)

Вывод трех сообщений

0,7с

Ожидание нажатия  клавиши «Enter»:

  1. время реакции пользователя
  2. время срабатывания клавиши
  3. время обработки микропроцессором кода клавиши

4с+7мкс+5мкс=4+7*10-6c

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

  1. определение микропроцессором системного времени
  2. вывод на экран
  3. процедура задержки  перед повторным выполнением цикла
  4. количество циклов

(2мкс+3мкс+1с)*n=6с*n, где n-количество повторений

Итого:

1с+0,7с+4с+32*n*10-6с =5,7с+32n*10-6с, где n – количество повторений цикла


 

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

Финогенов К.Г. Основы языка Ассемблера. – м.:Радио и связь, 2000.

Юров В. Assembler. Специальный справочник. – СПб.: Питер,2001.

Юров В., Хорошенко  В. Assembler – учебный курс. – СПб.

Калашников  О.А. Ассемблер? Это просто! – СПб: питер, 2006

www.wikipedia.org.

www.cyberforum.ru/assembler

www.vlata.com

www.forum.sources.ru

         

КП 230101 01 СД.01 10 13

Лист

           

Изм.

Лист

№ докум.

Подпись

Дата


 



         

КП 230101 01 СД.01 10 13

         
         
         

Разработать программу 

вывода системного времени 

на экран каждую секунду 

разным цветом в разных местах

Лит.

Масса

Масштаб

Изм.

Лист

№ докум.

Подпись

Дата

     

1

1:1

Разраб.

Ратников О.В.

   

Провер

Лутфуллина Т.Г

   
       

Лис

Листов 1

         

3Вм-10

       
       

 




Информация о работе Разработка программы на Assembler