- •Лекция №33 Адресация регистров и ячеек памяти в ассемблере. Основные команды языка ассемблер.
- •Адресация регистров и ячеек памяти в ассемблере
- •1.1 Непосредственная адресация
- •1.2 Прямая адресация регистров мпп
- •1.3 Адресация ячеек оп
- •Основные команды ассемблера
- •2.1 Команды пересылки данных
- •2.2 Арифметические команды
- •2.3 Команды сложения, вычитания и сравнения
- •2.4 Команды приращения
- •2.5 Команды умножения
- •2.6 Команды деления
- •2.7 Логические команды
- •2.8 Команды безусловной передачи управления
- •2.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •2.10 Команда перехода к подпрограмме: calLopr
- •2.11 Команда выхода из подпрограммы
- •2.12 Команды условной передачи управления
- •2.13 Команды управления циклами
- •2.14 Команды прерывания
2.13 Команды управления циклами
Используются для повторения цикла известное число раз. Количество повторений предварительно записывается в регистр СХ (счетчик циклов). Каждый цикл автоматически уменьшает показание СХ на 1.
Основная командат LOOPметка.
Циклы повторяются до обнуления СХ. Команда уменьшает значение в регистре СХ на единицу и передает управление по прямому адресу — метке, если значение в регистре СХ не равно нулю; в противном случае выполняется следующая по порядку команда. Флаги не меняет. Существуют еще четыре альтернативные команды, в которых можно поставить дополнительные условия. Передачи управления командами типа LOOP только ближние и короткие (метки near и short).
2.14 Команды прерывания
У команд прерывания есть некоторая аналогия с командами вызова процедуры CALL прекращается выполнение текущей программы и осуществляется переход к подпрограмме обработки прерывания; но при прерывания* нет деления на процедуры near или far, так как начальный адрес подпрограммы обработки прерывания (вектор прерывания) берется из таблицы векторов ОЗУ и он всегда32-битовый; кроме того, при вызове процедуры в стеке сохраняется только адрес возврата, а при прерывании — еще и флаги.
Имеются три команды прерывания.
□ INTорг — прервать (interrupt) выполнение программы и передать управление по одному из 256 адресов (векторов прерывания), определяемых номером прерывания — орг. По этой команде микропроцессор:
О помещает в стек содержимое регистров: FL(флагов),CS(сегмента команд),IP(указателя команд);
О обнуляет флаги TF и IF(флаги системного прерывания и блокировки прерывания);
О загружает в CS и IP, соответственно, второе и первое слова вектора прерываний, считанного из таблицы векторов в ОЗУ по адресу 4 х орг (4 х номер прерывания); вся таблица векторов занимает 1024 байт, то есть всего может быть 256 различных векторов прерывания. Например, командаINT1Ahсчитает из ОЗУ вектор, находящийся по адресу 68h- 4 •lAh, то есть в регистр CS будет загружен адрес сегмента из слова по адресу 6Ah, а в регистр IP— из слова по адресу 68hсмещение программы обработки этого прерывания.
Команда сбрасывает флаги IF- 0 иTF. - 0.
INTO— прервать по переполнению (interruptifoverflow), при возникновении переполнения флаг OF- 1 и управление передается по адресу ЮН (аналог команды INT4). Команда сбрасывает флаги IF - 0 иTF-0.
IRET— возврат из обработки прерывания (interruptreturn), обеспечивает воз врат из программы обработки прерывания. IRET— последняя команда под программы обработки прерывания, по этой команде из стека извлекаются три последние слова и загружаются в регистры IP,CS и FL, при этом содержимое SP увеличивается на 6. Команда устанавливает значения всех флагов.
