Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЭВМ СиС. 2012-2013.doc
Скачиваний:
31
Добавлен:
01.03.2025
Размер:
8 Мб
Скачать
☆

12.11.2012 — Лекция №14

Для возможности преждевременного выхода из цикла по результатам операций имеется возможность добавлять признак Z (Loopz, Loopnz). или NZ. Цикл продолжится до тех пор, пока этот признак установлен, т.е из цикла можно выйти по результату выполнения операции внутри цикла, которая устанавливает значение признака z.

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

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

INT TYPE; где TYPE – тип прерывания.

Тип прерывания определяется номером вектора прерываний, который изменяется от 0 до 255. Вектор определяет фиксированный адрес ячейки памяти программ, в которой передается управление и формируется следующим образом TYPE*4 – адрес в программе, т.к необходимо 4 байта для принятия адреса, вместе определяют CS: IP.

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

Кроме того, в составе команд прерываний ЭВМ имеются программные прерывания, которые выполняются полностью аналогично команде CALL, но вместо метки указывается фиксированный адрес. Команда INT в 2 раза короче команды CALL, так как она работает с фиксированным адресом, т.к в команде указывается не адрес перехода, а тип прерывания, имеющий длину 1 байт. Имеются прерывания, которые формируются по состоянию регистра признаков.

INT 0; IP=0000h; ошибка деления на ноль, поэтому на этом месте обычно устанавливается команда JMP и адрес обработчика прерывания

INT 1; по номеру адреса 4, прерывание для пошаговой обработки команд, это фактически дебагер.

INT 2; NMI – не маскируемое прерывание, прерывание от внешнего сигнала, при его возникновении в стек записывается OS, IP, F. Поэтому при выходе из аппаратного прерывания ставится команда IRET, т.е все восстанавливается в обратном порядке.

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

INT 4; прерывание по переполнению разрядной сетки.

INT 5; резерв

Таким образом, 1-5 аппарат, 6-1F – прерывания, зарезервированные для биоса, 20h-2Fh – для DOS, 30h-255h – прерывания пользовательские для отдельных программных модулей, главное правило: перед использованием прерывания нужно прочитать адрес прерывания: если =0, то программное прерывание свободно и его можно использовать, если там не 0, то какое-либо программное приложение уже заняло этот вектор прерывания, поэтому нужно выбрать другой вектор, или заменить его на свой, но после обработки прерывания нужно передать управление бывшему вектору прерывания. Но такие подходы иногда приводят к сбою в работе программ.

Команды работы с цепочками данных.

Цепочка данных – любая последовательность байтов или слов в памяти, от массивов отличается тем, что в массиве данные одного типа и выполняют они одну функциональную роль. В цепочках могут быть различные данные по функциональному назначению. Тег – любая последовательность данных, имеющая в начале и в конце ограничители. Для работы с цепочками данных имеются специальные команды, чаще всего они используются для обработки символьной информации.

MOVS dst, src ; - пересылает содержимое источника в приемник, длина цепочки определяется содержимым СХ, команда выполняется до тех пор, пока СХ не равно 0.

STOS dst, acc; - поместить содержимое АХ в приемник

LODS ACC, SLS; - загрузить АХ из указанного источника

CMPS dst, src; сравнение команды содержимого источника и приемника путем вычитания из источника приемника.

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

REPZ CMPS; т.е пока z=1

REP(NZ); т.е пока z не равно 1.

Результат сравнения находится в адресе источника и приемника.

SCAS det; - сравнение содержимого приемника с АХ.