Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛБ1.doc
Скачиваний:
0
Добавлен:
12.07.2019
Размер:
166.4 Кб
Скачать

;Моя первая программа

;директивы транслятору

Ideal small -модель памяти

assume CS:code,DS:data ; Соответствие сегментных регистров сегментам

; Опишем сегмент команд

code segment ;Откроем сегмент команд

begin: mov AX,data ;Настроим DS

mov DS,AX ;на сегмент данных;

; Выведем на экран строку текста

mov АН,09h ;Функция DOS вывода на экран

mov DX,offset msg ;Адрес выводимой строки

int 21h ;Вызов DOS

;Завершим сегмент кода программы

mov AX,4C00h ;Функция DOS завершения программы

int 21h ;Вызов DOS

code ends ;Закроем сегмент команд

;Опишем сегмент данных

data segment ;Откроем сегмент данных

msg db "Привет!$' ;Выводимая на монитор текстовая строка

data ends ;Закроем сегмент данных

;Опишем сегмент стека

stk segment stack ;Откроем сегмент стека

db 256 dup (?) ;Отводим под стек 256 байт

stk ends ;Закроем сегмент стека

end begin ;Конец текста с точкой входа

Среда программирования tasm

В данном пособии предложена удобная для изучения языка программирования Ассемблера среда программирования в виде каркасного исходного модуля с уже прописанными программными сегментами и встроенным меню для размещения отдельных программных задач. Ниже показана среда программирования (рис.3.), размещенная папке с именем KARKAS в составе файлов: каркасная исходная программа с именем kar.asm, программа трансляции – tasm.exe, программа компоновки - tlink.exe, программа для отладки td.exe, командный файл - kar.bat, содержащий команды последовательного вызова программ трансляции и компоновки.

Рис.3. Окно с содержанием папок KARKAS в оболочке Far manage

Содержание командного файла kar.bat:

tasm /m1/m2 kar.asm kar.obj kar.lst

tlink kar

Рассмотрим содержание каркасного исходного модуля kar.asm.

;Каркасный исходный модуль для обучения ассемблеру IBM PC со встраиваемыми задачами пользователя

;программный модуль для работы на Ассемблере

Include macro.lib ;ввести файл с макрокомандами

IDEAL ;режим, директива

MODEL SMALL ;модель памяти, доступны идентификаторы:@code, @data, @stack

ASSUME cs:@code, ds:@data, ss:@stack, es:@data ;проивязка сегментов

;памяти к сегментным регистрам процессора

;******************************************************************

Code segment ;начало сегмента кода

Start: ;начальный адрес программы

;Установка регистра ds на сегмент данных.

mov ax, @data ;физический адрес сегмента данных в регистр ax

mov ds, ax ;а затем в ds

;Сохраним начальное значение ES.

mov ax,es ;значение регистра es

mov [word ptr ExSg],ax ;записать в переменной ExSg как слово

;Сохранить параметры системы.

mov ax,ds ;переписать ds в es

mov es,ax

mov bx,OFFSET SistemArea ;смещение переменной - в bx

mov ax,1C01h

mov cx,111b

int 10h ;прерывание BIOS

;Установка монитора, видеорежима текст 80колонок, 25 текстовых строк.

mov ah,0 ;16-цветовой

mov al,3 ;текстовый режим

int 10h ;прерывание, функция BIOS

;Обработка меню для выхода на метки задач пользователя

menu: ;метка для выхода в меню

ClearScreen ;очистка экрана

mov [AdrGotoMenu],OFFSET menu

OpenMenu Menu_0 ;отрыть главное меню(макрокоманда)

ActivMenu Menu_0 ;активизировать меню(макрокоманда)

mov al,[CaseMenu] ;набор строк меню

cmp al,[ActivString] ;активизировать строки

jnz @@1

CloseMenu Menu_0 ;закрыть меню

@@1: mov bx,[AdrCaseMenu]

mov di,[bx]

jmp di

;область кодового сегмента пользователя

Zad1: ;метка программы задачи 1

ClrScr 0F4h ;очистить экран, код 1111 0100 – фон белый, цвет -красный

jmp menu ;выход в меню

Zad2: ;метка программы задачи 2

ClearScreen

jmp menu ;выход в меню

Zad3: ; метка программы задачи 3

ClrScr 0A9h ;очистка , код 1010 1001 – фон ярко-зеленый, цвет- синий

jmp menu ;выход в меню

Zad4: ;метка программы задачи 4

СlrScr 0ACh

jmp menu

Zad5: ;метка программы задачи 5

ClrScr 14h ;

jmp menu ;выход в меню

Zad6: ;метка программы задачи 6

ClrScr 72 ;очистка экрана с заданным атрибутом

jmp menu ;выход в меню

TestKey: ;тест клавиатуры, индикация кодов и сканкодов клавиатуры Locate 4,15

Print Nazimaem ;

@@1: KeyWait ;

cmp al,3 ;это ctrl +C?

jz cc ;

push ax ;

mov cx,0 ;

mov cl,al ;

Locate 4,16 ;

Print Code ;

BinToDec cx ;

Print ScanCod ;

pop ax

mov cx,0

xchg ah,cl

BinToDec cx

jmp @@1

cc: ClearScreen

jmp menu

;Выход из программы в DOS

exitDOS:

mov ax,ds

mov es,ax ;es=ds

mov bx,OFFSET SistemArea

mov ax,1C02h ;ah = 1C, al = 02

mov cx,111b

int 10h

mov ax,0600h ;ah = 06, al = 0

mov bh,7

mov cx,0

mov dx,184Fh

int 10h

mov ax,4C00h ;ah=4C, al = 0 возврат

int 21h ;в DOS

;включение подпрограмм (процедур) в файлах ;======================================

Include "menu.prc" ;включить обработчик меню

Include "proc.lib" ;включить библиотеку процедур

ENDS ;конец сегмента кода

Data segment ;сегмент данных

;Включить файл с данными для настройки меню.

INCLUDE "menu.dat" ;данные для настройки вида меню

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

; данные для теста клавиатуры

Nazimaemn db 'нажимаем - видим код $'

Code DB 'Код (al):$ '

ScanCod DB ' Сканкод(ah):$ '

Nazimaem DB 'Нажимаем клавишу, видим десятичный код(возврат по Ctrl/C ):$ '

;===================================================

;Память для десятичных цифр для процедуры BinToDec.

BuferData DB 4096 DUP(0)

Bufer DB 80 DUP(' ') ;буфер для ввода строки

OutBufer DB 'формируем запись в файл ',120 DUP(0)

Decimal DB 10 DUP(' ') ;буфер для чисел

Znak DB '+' ;знак числа.

ExSg DW 0 ;хранение регистра es

;Область для сохранения параметров системы.

SistemArea DB 1024 DUP (0) ;область системных данных

ENDS ;конец сегмента данных ;

STACK 200h ;сегмента стека размером 512

END Start ; конец программы, указан ее стартовый адрес

;первая программа на ассемблере (в каркасном модуле)

Zad1: ;метка задачи 1

ClrScr 0F4h ;очистить экран, фон 1111 –яркобелый, цвет символов – ;0100 - красный

;выведем на экран строку текста

mov АН,09h ;функция DOS вывода на экран текстовой строки

mov DX,offset msg ;адрес выводимой строки

int 21h ;вызов DOS

jmp menu ;выход в меню

;в сегменте данных каркасной программы запишем содержание выводимой строки

msg db "Моя первая программа $' ;выводимая строка текста

;вторая программа на ассемблере

;управление курсором

Zad1: ClrScr 11110000b; ;очистить экран, черные буквы на белом фоне

;вывод на экран

locate 39,12 ; расположение

Tout '0' ; Вывести число 0

CursorOff ; Выключить курсор

jmp menu ;выход в меню

Контрольные вопросы:

1.Какова архитектура процессора?

2.Что такое секция памяти, какие секции должна содержать программа на

ассемблере?

3.Как образуется физический адрес команд и данных?

4.Какова структура программы на языке ассемблера?

5.Назначение транслятора, компоновщика и отладчика? Результаты работы данных программ?

6.Можно ли допустить одинаковые адреса данных в памяти и во внешнем устройстве.

7. По какому признаку можно определить принадлежность ячейки памяти к ОЗУ либо ПЗУ?

8. Состав регистровой модели процессора. Как физически Вам представляется регистр?

9.Назначение программных прерываний. Этапы реализации аппаратного прерывания? Программного прерывания.

1.Задача электронной вычислительной машины (ЭВМ) - выполнение программы пользователя. Программа - определенная последовательность действий (инструкций, команд, операций).

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

Взаимодействие оперативной памяти и процессора.

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

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

7 6 5 4 3 2 1 0

Каждая такая ячейка в ЭВМ имеет размер в один байт и имеет свой адрес (порядковый номер), по которому можно обратиться именно к нужной ячейке, например, прочитать содержимое данного байта, или записать что - либо в него, т.е. установить в нем единичные или нулевые значения в его разрядах.

3. Образование физического адреса из сегментного адреса и смещения

4. Структура программы на языке ассемблера.

assume CS:code, DS:data ;заявлены регистры для сегмента команд и данных

code segment ;откроем сегмент команд

begin: mov AX,data ;пусковой адрес, настроим DS

mov DS,AX ;на сегмент данных

;выведем на экран строку текста

mov АН,09h ;функция DOS вывода на экран текстовой строки

mov DX,offset msg ;адрес выводимой строки -msg

int 21h ;вызов функции по прерыванию 21h (DOS)

;завершим программу

Mov ah,0 ;ожидание вода с клавиатуры

Int 16h ;для остановки и просмотра экрана

mov AX,4C00h ;функция DOS завершения программы

int 21h ;вызывается по прерыванию 21h

code ends ;закроем сегмент команд

;опишем сегмент данных

data segment ;откроем сегмент данных

msg db "Моя первая программа $' ;выводимая текстовая строка

data ends ;закроем сегмент данных

;опишем сегмент стека

stk segment stack ;откроем сегмент стека

db 256 dup (?) ;отводим под стек 256 байт

stk ends ;закроем сегмент стека

end begin ;конец текста программы, пуск по метке

5. Транслятор преобразует строки исходного языка программы в коды машинных команд.

Компоновщик позволяет компоновать исполняемую программу из нескольких исходных объектных модулей и выполняет привязку программы к памяти ЭВМ. Результатом работы компоновщика является исполняемый модуль с расширением .exe, например, name.exe.

Отладчик позволяет выполнять пошаговую трассировку, отслеживать, устанавливать или изменять значения переменных в процессе выполнения кода, устанавливать и удалять контрольные точки или условия остановки

6. Нельзя допустить одинаковые адреса данных в памяти и во внешнем устройстве.

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

8. Состав регистровой модели процессора

9. Прерывание - инициируемый определенным образом процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возобновлением выполнения прерванной программы.

Сигналы аппаратных прерываний, возникающие в устройствах, входящих в состав компьютера или подключенных к нему, поступают в процессор не непосредственно, а через два контроллера прерываний, один из которых называется ведущим, а второй - устройств. К входным выводам IRQ1...IRQ7 и IRQ8...IRQ15 (IRQ - это сокращение от Interrupt Request, запрос прерывания) подключаются выводы устройств, на которых возникают сигналы прерываний. Выход ведущего контроллера подключается к входу INT микропроцессора, а выход ведомого - к входу IRQ2 ведущего. Основная функция контроллеров - передача сигналов запросов прерываний от внешних устройств на единственный вход прерываний микропроцессора. При этом, кроме сигнала INT, контроллеры передают в микропроцессор по линиям данных номер вектора, который образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос прерывания. Для ведущего контроллера базовый вектор всегда равен 8, для ведомого - 70h.

Программные прерывания вызываются командой int с числовым аргументом, который рассматривается процессором, как номер вектора прерывания.

11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]