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




Формат КБПУ.

К командам этой группы относятся

а) JMP адрес

б) вызов подпрограммы [call адрес (имя)]

в) Ret – выход из подпрограммы

 

24) Подпpогpаммы. Типы вызовов подпpогpамм. Передача паpаметpов в подпpогpаммы.

Для идентификации подпрограмм используется директива

PROC – начало п/п

ENDP – конец п/п

Формат:

Имя PROC Тип перехода

Тело п/п

------------------------------

RET

Имя ENDP

Типы перехода: 1) Near; 2) Far

Переходы бывают короткими и длинными. Короткие – по умолчанию ±127 байт (near). Дальние (far) – переход с учётом сегментного регистра.

Команды возврата не имеют типа перехода. Вызов п/п осуществляется командой CALL (Call <имя> – команда обеспечивает:

1) сохранение адреса возврата в стеке (регистр IP);

2) запуск выполнения вызываемой процедуры, то есть загрузку в IP нового адреса)

RET – осуществляет выборку из стека адреса возврата и загрузку его в IP.

Передача параметров в п/п

- Через регистры

- Через стек

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

Перед входом в п/п в основной программе в стек с помощью push передаются параметры; в начале п/п из стека эти параметры извлекаются в обратном порядке.

 

25) Макpокоманды. Формальные локальные параметры. Формирование библиотеки макроопределений.

Макрокоманды представляют собой последовательность операторов на языке TASM, неоднократно повторяющуюся в тексте программы. Подобная последовательность операторов описывается в программе отдельно, ей присваивается имя.

Структура:

Имя Macro <список формальных параметров> Local <список локальных меток> ENDM

Список формальных параметров – наименьшие параметры, которые передаются в макрос в виде списка после его имени. В теле макроса эти значения подставляются в соответствии параметрам.

Список локальных меток – имена меток внутри тела программы, эти имена могут иметь те же названия, что и в основной программе и не пересекаться.

Макрос описывается в программе в любом месте, но до начала её использования в теле программы.

TASM в процессе ассемблирования подставляет вместо имени макроса последовательность операторов, которыми она описана.

По сравнению с п/п макросы позволяют:

- обеспечит большую динамичность программе, т.к в п/п можно передать только параметры, а в макросе, за счёт изменения входных параметров, можно изменить и сами действия.

- ускорить выполнение программы, т.к МП не нужно отвечать на вызов п/п.

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

26) Логика и организация пpогpамм. Упрощенные директивы управления сегментами. Модели памяти.

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

DOSSEG

.MODEL SMALL

.STACK 200h

.DATA

var1 db 0

var2 dw 0

.CODE

start

END

DOSSEG – используется для группировки сегментов в соответсвии с соглашением фирм Borland и Microsoft.

MODEL

"Ближний код" предусматривает,что переходы в программе осуществляются с помощью загрузки одного регистра IP, а "дальний код " предполагает, что переходы осуществляются при загрузке CS:IP.

Для данных термин FAR означает использование данных по полному адресу с использованием сегмента данных и сегмент смещения. Термин NEAR предполагает выборку данных, используя только 16-тиразрядное смещение.

FAR ES:[BX]

NEAR [BX]

Существуют следующие модели памяти:

TINY – крошечная. И код программы, и данные размещаются внутри одного и того же сегмента

(64 К). Код и данные имеют ближний тип.

SMALL – малая. Данные в одном сегменте (64 К), а код – в другом. Код и данные имеют ближний тип.

COMPACT – компактная. Код помещается в один сегмент, данные могут превышать размер сегмента. Код ближнего типа, данные – дальнего.

MEDIA – средняя. Код может превышать размер сегмента. Код- дальний, данные – ближний.

LARGE – большая. И код, и данные превышают размер сегмента, оба дальнего типа.

HUGE – огромная. И код, и данные не имеют ограничений, имеют дальний тип.

.STACK директивы, определяющие начало соответствующего

DATA сегмента.

.CODE

END (без.) [метка начала программы] необязательный элемент.

 

 

27,28) Стандартные и упрощенные директивы определения сегментов. Модели памяти.

СТАНДАРТНЫЕ ДИРЕКТИВЫУПРАВЛЕНИЯ СЕГМЕНТАМИ

DGROUP GROUP DATA1 STACK1

ASSUME CS: TEXT1, DS: TEXT2, SS: STACK1

STACK1 SEGMENT PARA STACK "STACK"

db 200h

STACK2 ENDS

_DATA1 SEGMENT WORD PUBLIC "DATA"

var1 db 0

var2db 0

_DATA1 ENDS

_TEXT1 SEGMENT WORD PUBLIC "CODE

start

… сама программа

_TEXT1 ENDS

END start

Количество сегментов одного типа в программе со стандартными директивами управления сегментами (СДУС) моет быть несколько и определяется размерами программы и данных.

Директива <имя> SEGMENT определяет начало сегмента.

<имя> ENDS – конец сегмента

Директива SEGMENT имеет следующий синтаксис:

<имя> SEGMENT [<тип выравнивания>][<тип связи>][<тип класса>].

1. Тип выравнивания показывает компоновщику, с какой границы начинается сегмент.

PAGE – все границы начинаются с адресов, кратных 256 хххх00 - обязательно последний байт нулевой

PARA (параграф) – кратно 16 ххххх0.

WORD – кратно 2 xxxxxEh.

BYTE – кратно 1 xxxxx.

2. Тип связи – сообщает компоновщику, как образуются друг относительно друга сегменты одного класса.

PUBLIC – сегменты, имеющие общее имя и общее имя класса, располагаются в памяти одним непрерывным блоком и для всех сегментов существуют один базовый адрес.

STACK – аналогично PUBLIC, но для стековых сегментов.

COMMON – сегменты, имеющие общее имя и общее имя класса, располагаются в памяти, прерывая друг друга. Общий размер равен размеру наибольшего из сегментов.

MEMORY – сегменты с таким именем располагаются в области старших адресов памяти может быть только один сегмент MEMORY.

AT[адрес] – сегмент располагается по указанному адресу, тип выравнивания по умолчанию PARA.

Пример: DOSSEG SEGMENT AT [0B800h]

3. Типы класса – имена, фиксированные (CODE, DATA, STACK).

GROUP предназначена для адресации нескольких сегментов с помощью одного базового адреса.

Синтаксис:

<имя группы> GROUP<список сегментов>

ASSUME указывает TurboAssembler'у, в значении какого сегмента усатанавливается данный сегментный регистр.

ASSUME CS:_CODE – такая запись обязательна.

_____________________

Современная память содержит несколько видов памяти.

Внешняя память относится к внешним устройствам ПК и используется для долговременного хранения информации. Представлена разнообразными видами ЗУ (накопители на жёстких и гибких магнитных дисках). Характерны большие объемы и медленное обращение, малая скорость.

Основная память предназначена для хранения и оперативного обмена информацией с прочими блоками машины.

ПостЗУ предназначено для хранения постоянной программной и справочной информации. Позволяет только считывать хранящуюся в нём информацию.

ОперЗУ предназначено для записи, хранения и считывания информации, непосредственно участвующую в информационно-вычислительном процессе, выполняемом в ПК в текущий период.

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

CMOS – энергозависимая память, располагающаяся так же на системной плате. В ней хранится информация об аппаратной конфигурации ПК.

КЭШ – буферная, недоступная для пользователя быстродействующая память, автоматически используемая компьютером для ускорения операций с информацией, хранящейся в более медленно действующих ЗУ. В процессе работы отдельные блоки ОП копируются в КЭШ. Когда ЦП обращается за командой или данными, сначала он их ищет в КЭШ и если находит, то быстро извлекает. Если не находит, то содержимое КЭШ обновляется новыми данными из ОП. КЭШ бывает 1 и 2 рода. КЭШ 1 рода находится в кристалле процессора, а КЭШ 2 рода подключается внешне к материнской плате.

_____________________

29) Организация пpеpывании и их обработка. Внешние и внутренние пpеpывания. Таблица адресов программ обработки прерываний. Структура программ обработчиков прерываний.

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

Внутренние: формируются процессором, если возникает необходимость выполнения стандартных процедур. В систему команд введена int n, где n-вектор прерывания, то есть для процессора дан сразу адрес таблицы. Механизм выполнения этой команды соответствует механизму обработки внешних прерываний.

Внешние: делятся на NMI (немаскированные) и INTR (маскированные).

Каждый микропроцессор имеет 2 входа для проверки прерываний. Когда внешнее устройство формирует сигнал на входе NMI, процессор прекращает свои действия (но не в середине команды) и реагирует на прерывания. Это прерывание используется во время критической ситуации, например, отключение питания. Для не катастрофических событий используется прерывание INTR. Процессор может игнорировать этот сигнал в соответствии с флагом IF. IF=0 – прерывания запрещены. IF=1 – разрешены.

Кроме сигнала прерывания по шине данных процессору приходит код, идентифицирующий устройство, вызвавшее прерывание. Этот код называется вектором прерывания.

Для управления прерываниями используется микросхема Intel 8259 или ее аналогов. В современных процессорах данная МС входит в состав чипа СБИС (чипа управления периферии). В первый момент может поступить 16 прерываний от различных устройств. Существует специальная схема реализующая выбор наиболее приоритетного прерывания в данный момент времени.

0 – таймер

1 – клавиатура

2 – канал ввода/вывода

8 – часы реального времени

9 –программа переводится в IRQ2

10-12 – системное использование

13 – математический сопроцессор

14 – контроллер физического диска

15 – резерв

3 – последовательный порт COM2

4 – последовательный порт COM1

5 – LPT2 (параллельный порт)

6 – Floppy-диск

7 – LPT1 (параллельный порт - принтер)

Маскирование 16 прерываний осуществляется с помощью регистра масок, которые находятся в микросхеме управления прерывания

Порт 20 – регистр управления прерываниями

Порт 21 – регистр масок

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

В случае если пользователь полностью заменяет стандартный обработчик аппаратных прерываний, то в конце программы обработки прерываний надо выдать в порт 20h байт с кодом 20h. Эти действия необходимы для очистки обслуживания прерываний. Для каждого прерывания у процессора есть своя программа обработки обслуживания прерываний. Адреса этих программ находятся в таблице адресов обработки прерываний.

Каждый элемент таблицы состоит из 4 байт и содержит значения IP и CS,

соответствующие началу программ, обслуживающих конкретные прерывания. Таблица располагается с нулевого адреса.

При получении сигнала прерывания процессор:

- Завершает текущую программу.

- Сохраняет свои IP и CS и регистр флагов в стеке.

- Затем по шине данных получает значение вектора прерываний.

- Загружает в IP, CS данные из таблицы адресов прерываний.

Процессор определяет тип или номер прерывания, считывая с шины данных код, соответствующий этому прерыванию, который формирует устройство, выставившее это прерывание. Вход на микропроцессор 1 (INTR).

При выходе из программы обработки прерываний выполняется команда IRET, которая восстанавливает регистр флагов, IP, CS из стека.

 

30) Базовая система ввода/вывода BIOS. Прерывания операционной системы DOS. Средства

MS-DOS для работы с внешними устройствами(основные функции).

Программа, управляющая основными прерываниями в системе до загрузки ОС, располагается в ПЗУ и называется BIOS.

При включении компьютера CS(fffffff0) и IP(0) устанавливаются на адрес ПЗУ.

- Тестирует и определяет различные порты для подключения внешних устройств.

- формирует с 0-ого адреса памяти таблицу адресов прерывания.

- Выполняет команду int 11h - запрос списка присоединения оборудования

- int 12h – определение размера физической памяти

- обращается к диску, являющемуся загрузочным для загрузки ОС.

BIOS обслуживает прерывания 0-20, остальные - ОС.

Int 4 - при переполнении ОП

5 – печать содержимого экрана

8 – системный таймер

9 - клавиатура

A,B,C,D – прерывания с жёсткого диска

0E – с гибкого диска

Всё ПО ПЗУ BIOS разделено на:

TEST – анализирует наличие и работоспособность внешних устройств

POST – устанавливает драйверы и загружает ОС.

Прерывания ОС

К ним относятся прерывания 21h<, в основном это набор резидентных драйверов периферийных устройств компьютера.

Int 20h – функция выхода из прерывания.

Наибольшее кол-во функций находится в int21h, такие как:

00 – завершение программы, аналогично 20h

01-0С – ввод с клавиатуры

0D-0E – работа с дисководом

0F-16 – чтение и запись файлов с использование блока управления

2A-2D – установка даты

3C-40 – открытие/закрытие, чтение и запись файла с использованием файлового дескриптора.

 

31) Программы.COM и.EXE формата (структура, размер). Префикс программного сегмента(PSP). Чтение параметров командной строки в PSP.

Программы.com и.exe форматов – исполняемые программы. COM всегда меньше по объему, чем EXE-формате. Программы типа com являются односегментными. Это и программа, и данные, и стек размещаются в одном сегменте.

Программы типа exe состоят из 2-х частей:

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

Собственно загрузочный модуль.

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

Заголовок имеет минимальный размер 512 байт.

Программа типа com не имеет заголовка, что обеспечивает более эффективную ее работу.

Hello.exe 550 байт

Hello.com 25-30 байт

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

В com место под префикс программного сегмента (PSP) резервирует программист, начиная программу директивой ORG 100h. Таким образом PSP включается в область сегмента программы.

Любая программа содержит специальную таблицу PSP, имеющую размер 256 байт.

В exe место под PSP не резервируется. Он пристраивается к программе в процессе загрузки.

Указатель стека на конец сегмента. Граница между программой и стеком условна.

Основа вирусов – засорение стека.

Префикс программного сегмента (PSP)

Префикс состоит из 256 (100h) байт.

00 – int 20 – выход из подпрограммы.

02 – общий размер доступной памяти (кратное 16)

0Аh-0Dh – содержимое вектора прерывания по завершению программы.

0Еh – содержимое вектора прерывания по Ctrl/C

12h-15h -------//-------- по критической ошибке.

2Сh-2Dh – сегментный адрес блока памяти с окружением данного процесса

Окружение – информация о процессе.

80h-FFh – хвост команды или дисковая область передачи данных

На PSP указывает регистр ES. По адресу ES: [80h] находится количество байт, содержащееся в хвосте без учёта символа <Enter>

 

32) Клавиатура и программирование клавиатурных операций.

Входные линии подключаются к Х0 – Х 3 клавиатурного процессора, выходящего Y0 – Y3. Устанавливается по очереди, на каждой из вертикальных линий, уровень напряжений = 0. Клавиатурный процессор опрашивает состояние горизонтальных линий. Если нажатых клавиш нет, уровень напряжений на всех горизонтальных линий = 5 В. Если нажать клавишу, то соответствующие вертикальные и горизонтальные линии замкнутся. В момент t, когда на этой вертикальной линии устанавливается 0, на соответствующей горизонтальной тоже 0. Наличие 0 на горизонтальной линии фиксируется процессором, и по соотношению номера горизонтальных линий и времени определяется номер горизонтальной линии. Номер клавиши однозначно связан с распайкой клавиатурной матрицы (сканкод). Клавиатурный процессор сканирует клавиатуру для поиска клавиши. Этот код преобразуется процессором в ASCII-код. Если нажать клавишу и не отпускать её, выполняется функция автоповтора, когда периодически в ПК посылается код. Для работы с клавиатурой используются порты 60 h и 61h. С их помощью можно осуществить режимы работы клавиатуры.

Режим автоповтора 0F3h. Затем байт, определяющий характеристики клавиатурного режима

Для программирования управляющих светодиодов (Caps lock, Num Lock, Scroll Lock) используется команда 0Edh. Затем посылается байт с указанием номера светодиода.

Биты

0 вкл. Scroll Lock

1 Num Lock

2 Caps Lock

Процесс взаимодействия системы с клавиатуры выглядит так:

 

33) Работа с файлами.

Для выполнения дисковых операций в режиме использования файлового номера необходимо сообщить DOS адрес строки в формате ASCIIZ в виде:

PATHNM DB 'D:\PRAKT2\TEXT.DAT',0

Строку должен завершать нулевой байт. Адрес этой строки загружается в регистр DX, например, командой:

LEA DX, PATHNM

Операция создания файла - функция DOS 3CH.

Операция открытия файла - функция DOS 3DH.

При выполнении этих операций в регистре AX устанавливается двухбайтное число, представляющее собой файловый номер (дескриптор файла). Файловый номер необходимо сохранить в элементе данных DW для дальнейшего использования, на пример:

MOV HANDLE, AX

1. Создание дискового файла

Процедура создания дискового файла состоит из следующих последовательных операций:

1. Открытие дискового файла для создания.

2. Запись в файл.

3. Закрытие файла.

1.1. Операция открытия для создания нового файла осуществляется функцией 3Ch в прерывании DOS INT 21H. При этом регистр DX должен содержать адрес ASCIIZ-строки.

mov AH, 3Сh; функция создания файла

mov CX, 00; байт-атрибут файла

lea DX, PATHNM

int 21h

jc error; переход по ошибке

mov HANDLE, AX; сохранить файловый номер

На этапе открытия происходит проверка доступного дискового ространства, результат проверки устанавливается в регистре AL:

00 на диске есть свободное пространство,

01...18 различные типы ошибок.

Флаг CF устанавливается в 00 при успешном выполнении операции.

1.2. Операция записи файла осуществляется функцией 40h в прерывании DOS INT 21H. При этом регистр BX должен содержать файловый номер, в регистре CX число записываемых байтов, а в регистре DX - адрес области вывода:

HANDLE DW?

OUTREC DB 256 dup (?)

mov AH, 40h; функция записи файла

mov CX, 256; длина записи

mov BX, HANDLE; файловый номер

lea DX, OUTREC; адрес обл. вывода

int 21h

jc error2; переход по ошибке

сmp AX, 256

jne error3

На этапе записи происходит проверка доступного дискового пространства, в результате проверки очищается флаг CF и устанавливается в регистре AX число действительно записанных байтов. Если диск переполнен, то содержимое AX может не совпадать с заданным. Если произошла ошибка закрытия, то флаг CF устанавливается в 1, а в регистр AX заносится код ошибки.

1.3. Для закрытия файла используется функция 3Eh:

mov AH, 3Eh; Функция ЗАКРЫТИЯ

lea BX, HANDLE; Файловый номер

int 21h

Эта операция записывает на диск данные, которые еще остались в буфере DOS.

2. Считывание дискового файла

Процедура считывания дискового файла состоит из следующих последовательных операций:

1. Открытие дискового файла.

2. Чтение записей из файла.

2.1. Открытие дискового файла для чтения выполняется функцией 3Dh. При этом в регистре DX адрес ASCIIZ строки, а в AL код доступа:

0 - Открыть файл только для ввода

1 - Открыть файл только для вывода

0 - Открыть файл для ввода и для вывода

Приведем пример открытия файла для чтения:

mov ah, 3Dh; функция открытия файла

mov al, 00; только чтение

lea dx, PATHMN; адрес ASCIIZ- строки

int 21h

jc error; переход по ошибке

mov HANDLE, AX

Если произошла ошибка открытия, то флаг CF устанавливается в 1, а в регистр AX заносится код ошибки.

2.2. Для чтения записей с дискового файла используется функция 3Fh. При этом в регистре BX устанавливается файловый номер, в CX – число байтов и в регистре DX адрес области ввода.

Приведем пример чтения 512-байтного файла в буфер:

HANDLE DW?

BUFIN DB 512 dup (?)

mov AH, 3Fh; функция чтения файла

mov CX, 512; длина записи

mov BX, HANDLE; файловый номер

lea DX, BUFIN; адрес обл. ввода

int 21h

jc error; переход по ошибке

сmp AX, 00

je _end

3. Другие операции, использующие файловый номер

Результат выполнения некоторых дисковых операций помещается в так называемую область передачи данных – DTA размером 128 (80h) байт.

Начальный адрес области передачи данных DTA передается DOS с помощью функции 1Ah:

NameDTA db 80h dup (?)

mov ah, 1ah

lea dx, NameDTA; загрузить адрес DTA

int 21h

42h - Управление файловым указателем. В регистр BX устанавливается файловый номер, в CX:DX требуемое смещение в байтах, в AL - код, определяющий точку отсчета смещения:

0 - смещение от начала файла;

1 - смещение от текущего значения файлового указателя;

2 - смещение от конца файла, при успешном выполнении CF:=0.

При успешном выполнении операции (CF:=0) установленное значение файлового указателя возвращается регистровой паре DX,AX. Например, размер файла можно определить, установив в регистровую пару CX:DX=0 и используя код 2 в регистре AL.

43h - Чтение (AL=0) и установка (AL=1) атрибутов файла. Предварительно файл необходимо открыть. В DS:DX указывают на путь. Байт нового значения атрибутов помещается в CX. Флаг CF устанавливается при ошибке, код ошибки возвращается в AL.

Атрибут файла: биты 00=1 - только для чтения

01=1 - файл является "скрытым"

02=1 - файл является "системным"

03=1 - это не файл, а метка тома

04=1 - файл является подкаталогом

05=1 - файл был изменен

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

MOV AL, 01; нормального

MOV CX, 00; атрибута

LEA DX, PATHNM; ASCIIZ - строка

INT 21h; Вызов DOS

4Eh и 4Fh - Поиск файлов по шаблону. В регистр DX загрузить адрес ASCIIZ строки с именем пути и шаблоном имени файла (можно использовать? и *).

MOV AH, 4Eh; Запрос на начало поиска

MOV CX, 00; нормальный атрибут

LEA DX, PATHNM; ASCIIZ - строка

INT 21h; Вызов DOS

Если программа находит файл, то данные о файле размещаются в буфере DTA (21-й байт - атрибут, 22-23 - время, 24-25 - дата, 26-29 - длина, с 30-го байта - имя в виде 13-ти байтовой ASCIIZ - строки, завершаемой 00h).

 

Формат даты представлен в виде:

время: биты 11-15 часы (0-23)

05-10 минуты (0-59)

00-04 секунды (0-29 двухсекундный интервал)

дата: биты 09-15 год (0-119, смещение с 1980 года)

05-08 месяц (1-12)

00-04 число (1-31)

 

35) Структура системного таймера. Программирование временных интервалов и звука.

Для управления режимом работы системного таймера имеется регистр управления – порт 43h

Счётчик порт 42h

Значение счётчика является делителем для значения частоты генератора.

Программа формирует звук в зависимости от нажатой клавиши. Выход по ESC.

Последовательность действий:

- Приём символа в клавиатуры, если Esc – выход, иначе

- Программируем второй канал системного таймера и заносим значение кода клавиши, умноженного на коэффициент.

- Разрешаем работу второго канала и динамика через порт 61

- Переход на начало.

- Запрещаем работу второго канала и выход.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту:

Обратная связь