рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Свойства операторов работы с экраном

Свойства операторов работы с экраном - раздел Образование, Свойства Операторов Работы С Экраном. ...

Свойства операторов работы с экраном.

Команда прерывания INT

Для выполнения ввода и вывода используется команда INT (прерывание). Существуют различные требования для указания системе какое действие (ввод или… Команда INT прерывает обработку программы, передает управление в DOS или BIOS для определенного действия и затем…

Установка курсора

Команда INT 10H включает в себя установку курсора в любую позицию и очистку экрана. Ниже приведен пример установки курсора на 5-ю строку и 12-й… MOV AH,02 ;Запрос на установку курсора MOV BH,00 ;Экран 0

Очистка экрана

Когда программа начинает cвое выполнение, экран может быть очищен. Очищаемая область экрана может начинаться в любой позиции и заканчиваться в… Начальное значение строки и столбца заносится в регистр DX, значение 07 — в регистр BH и 0600H в AX. В следующем…

Использование символов возврата каретки, конца строки и табуляции для вывода на экран

Десятичные ASCII Шестнадцатеричные CR 13 0DH LF 10 0AH

Расширенные возможности экранных операций

Байт атрибутов

Фон Текст Атрибут: BL R G B I R G B Номер битов: 7 6 5 u 3 2 1 0

Эффект выделения

RGB RGB Неотображаемый (черный по черному) 000 000 Подчеркивание (не для цвета) 000 001

Прерывание BIOS INT 10H

Прерывание INT 10H обеспечивает управление всем экраном. В регистре AH устанавливается код, определяющий функцию прерывания. Команда cохраняет содержимое регистров BX, CX, DX, SI и BP. Ниже описывается все возможные функции.

AH=00

Установка режима. Данная функция позволяет переключать цветной монитор в текстовый или графический режим. Установка pежима для выполняемой в текущий момент программы осуществляется c помощью INT 10H.

AH=01

Установка размера курсора. Курсор не является символом из набора ASCII-кодов. Компьютер имеет собственное аппаратное обеспечение для управления видом курсора. Для этого имеется специальная обработка по INT прерыванию. Обычно символ курсоpа похож на символ подчеркивания.

AH=02

Установка позиции курсора. Эта функция устанавливает курcор в любую позицию на экране в соответствии с координатами cтроки и столбца.

AH=03

Чтение текущего положения курсора. Программа может определить положение курсора на экране (строку и столбец), а также pазмер курсора, следующим образом:

AH=04

Чтение положения светового пера. Данная функция используeтся в графическом режиме для определения положения светового пеpа.

AH=05

Выбор активной страницы.

AH=06

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

Ранее код 06 использовался для очистки экрана. В текстовом режиме установка в регистре AL значения 00 приводит к полной прокрутке вверх всего экрана, очищая его пробелами. Установка ненулевого значения в регистре AL определяет количество строк прокрутки экрана вверх. Верхние строки уходят с экрана, а чистые строки вводятся снизу. Следующие команды выполняют прокрутку всего экрана на одну строку:

MOV AX,0601H ;Прокрутить на одну строку вверх

MOV BH,07 ;Атрибут: нормальный, черно-белый

MOV CX,0000 ;Координаты от 00,00

MOV DX,184FH ; до 24,79 (полный экран)

INT 10H ;Вызвать BIOS

Для прокрутки любого количества строк необходимо установить соответствующее значение в регистре AL. Регистр BH содержит атрибут для нормального или инвертированного отображения, мигания, установки цвета и так далее. Значения в регистрах CX и DX позволяют прокручивать любую часть экрана. Ниже объясняется стандартный подход к прокрутке:

1. Определить в элементе ROW (строка) значение 0 для установки строки положения курсора.

2. Выдать текст и продвинуть курсор на следующую строку.

3. Проверить, находится ли курсор на последней строке (CMP ROW,22).

4. В случае, если да, то увеличить элемент ROW (INC ROW) и выйти.

5. В случае, если нет, то прокрутить экран на одну строку и, используя ROW переустановить курсор.

AH=07

Прокрутка экрана вниз. Для текстового режима прокрутка экрана вниз обозначает удаление нижних строк и вставка чистых строк сверху.

Регистр AH должен содержать 07, значения остальных регистpов аналогичны функции 06 для прокрутки вверх.

AH=08

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

MOV AH,08 ;Запрос на чтение атр./симв.

MOV BH,00 ;Страница 0 (для текстового реж.)

INT 10H ;Вызвать BIOS

Данная функция возвращает в регистре AL значение символа, а в AH — его атрибут. В графическом режиме функция возвращает шест.00 для не ASCII-кодов. Так как эта функция читает только один cимвол, то для символьной строки необходима организация цикла.

AH=09

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

MOV AH,09 ;Функция вывода

MOV AL,символ ;Выводимый символ

MOV BH,страница ;Номер страницы (текст.реж.)

MOV BL,атрибут ;Атрибут или цвет

MOV CX,повторение ;Число повторений символа

INT 10H ;Вызвать BIOS

В регистр AL должен быть помещен выводимый на экран символ. Значение в регистре CX определяет число повторений символа на экране. Вывод на экран последовательности различных символов требует организации цикла. Данная функция не перемещает курсор. В следующем примере на экран выводится пять мигающих «сердечек» в инвертированном виде:

MOV AH,09 ;Функция вывода

MOV AL,03H ;Черви (карточная масть)

MOV BH,00 ;Страница 0 (текст. режим)

MOV BL,0F0H ;Мигание, инверсия

MOV CX,05 ;Пять раз

INT 10H ;Вызвать BIOS

В текстовом (но не в графическом) режиме символы автоматически выводятся на экран и переходят с одной строки на другую. Для вывода на экран текста запроса или сообщения необходимо составить программу, которая устанавливает в регистре CX значение 01 и в цикле загружает в регистр AL из памяти выводимые символы текста. Так как регистр CX в данном случае занят, то нельзя использовать команду LOOP. Кроме того, при выводе каждого символа необходимо дополнительно продвигать курсор в следующий столбец (функция 02).

В графическом режиме регистр BL используется для определения цвета графики. В случае, если бит 7 равен 0, то заданный цвет заменяет текущий цвет точки, если бит 7 равен 1, то происходит комбинация цветов с помощью команды XOR.

AH=0A

Вывод символа в текущую позицию курсора. Единственная разница между функциями 0A и 09 состоит в том, что функция 0A не устанавливает атрибут:

MOV AH,0AH ;Функция вывода

MOV AL,символ ;Выводимый символ

MOV BH,страница ;Номер страницы (для текста)

MOV CX,повторение ;Число повторений символа

INT 10H ;Вызвать BIOS

Для большинства применений команда прерывания DOS INT 21H более удобна.

AH=0E

Вывод в режиме телетайпа. Данная функция позволяет использовать монитор, как простой терминал.

Для выполнения этой функции необходимо установить в регистре AH шест. значение 0E, в регистр AL поместить выводимый символ, цвет текста (в графическом режиме) занести в регистр BL и номер страницы для текстового режима — в регистр BH. Звуковой сигнал (код 07H), возврат на одну позицию (08H), конец строки (0AH) и возврат каретки (0DH) действуют, как команды для форматизации экрана.

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

AH=0F

Получение текущего видео режима. Данная функция возвращает в регистре AL текущий видео режим, в pегистре AH — число символов в строке (20, 40 или 80), в регистре BH — номер страницы.

AH=13

Вывод символьной строки (только для AT). Данная функция позволяет на компьютерах типа AT выводить на экран символьные строки с установкой атрибутов и перемещением курсора:

MOV AH,13H ;Функция вывода на экран

MOV AL,сервис ;0, 1, 2 или 3

MOV BH,страница ;

LEA BP,адрес ;Адрес строки в ES:BP

MOV CX,длина ;Длина строки

MOV DX,экран ;Координаты на экране

INT 10H ;Вызвать BIOS

Возможен следующий дополнительный сервис:

· 0 — использовать атрибут и не перемещать курсор;

· 1 — использовать атрибут и переместить курсор;

· 2 — вывести символ, затем атрибут и не перемещать курсор;

· 3 — вывести символ, затем атрибут и переместить курсор.

 

Расширенный ASCII код

DA Верхний левый угол BF

Другие операции ввода/вывода

Ниже перечислены другие функции DOS, которые могут оказаться полезными в работе. Код функции устанавливается в регистре AH и, затем, выдается команда INT 21H.

AH=01

Ввод с клавиатуры с эхо отображением. Данная функция возвращает значение в регистре AL. В случае, если содержимое AL не равно нулю, то оно представляет собой стандартный ASCII-cимвол, например, букву или цифру. Нулевое значение в регистре AL свидетельствует о том, что на клавиатуре была нажата специальная функциональная клавиша, например, Номе, F1 или PgUp. Для определения скэн-кода клавиш, необходимо повторить вызов функции. Данная функция реагирует на запрос Ctrl/Break.

AH=02

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

AH=07

Прямой ввод с клавиатуры без эхо отображения. Данная функция работает аналогично функции 01 с двумя отличиями: введенный символ не отображается на экране, то есть, нет эхо, и oтсутствует реакция на запрос Ctrl/Break.

AH=08

Ввод с клавиатуры без эхо отображения. Данная функция действует аналогично функции 01 с одним отличием: введенный символ не отображается на экран, то есть, нет эхо.

AH=0B

Проверка состояния клавиатуры. Данная функция возвращает шест. FF в регистре AL, если ввод с клавиатуры возможен, в противном случае — 00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода с клавиатуры.

 

Ввод с клавиатуры по команде BIOS INT 16H

Команда BIOS INT 16H выполняет специальную операцию, которая в соответствии с кодом в регистре AH обеспечивает следующие три функции ввода с клавиатуры.

AH=00

Чтение символа. Данная функция помещает в регистр AL oчередной ASCII символ, введенный с клавиатуры, и устанавливает скэн-код в регистре AH. В случае, если на клавиатуре нажата одна из специальных клавишей, например, Номе или F1, то в регистр AL заносится 00. Автоматическое эхо символа на экран по этой функции не происходит.

AH=01

Определение наличия введенного символа. Данная функция сбрасывает флаг нуля (ZF=0), если имеется символ для чтения с клавиатуры; очередной символ и скэн-код будут помещены в регистры AL и AH соответственно и данный элемент останется в буфере.

AH=02

Определение текущего состояния клавиатуры. Данная функция возвращает в регистре AL состояние клавиатуры из адреса памяти:

Бит

Состояние вставки активно (Ins)

Состояние фиксации верхнего регистра (Caps Lock) переключено

Состояние фиксации цифровой клавиатуры (Num Lock) переключено

Состояние фиксации прокрутки (Scroll Lock) переключено

Нажата комбинация клавишей Alt/Shift

Нажата комбинация клавишей Ctrl/Shift

Нажата левая клавиша Shift

Нажата правая клавиша Shift

 

Функциональные клавиши

1. Символьные (алфавитно-цифровые) клавиши: буквы от a до z, цифры от 0 до 9, символы %, $, # и так далее. 2. Функциональные клавиши: Номе, End, Возврат на позицию, стрелки, Enter, Del,… 3. Управляющие клавиши: Alt, Ctrlи Shift, которые работают совместно с другими клавишами.

Скэн-коды

Функциональные клавиши Скэн-коды Alt/A — Alt/Z 1E — 2C

Цвет и графика

Текстовой режим

Цвета Тремя основными цветами являются красный, зеленый и синий. Комбинируя основные… I R G B

Байт-атрибут

Для установки цвета можно использовать в команде INT 10H функции AH=06, AH=07 и AH=09. Например, для вывода пяти мигающих звездочек светло-зеленым… MOV AH,09 ;Функция вывода на экран MOV AL,'*' ;Выводимый символ

Графический режим

Для генерации цветных изображений в графическом режиме используются минимальные точки растра — пикселы или пэлы (pixel). Цветной графический адаптер (CGA) имеет три степени разрешения:

1. Низкое разрешение.

2. Среднее разрешение.

3. Высокое разрешение.


Лекция 8. Требования языка

Комментарии в программах на Ассемблере

Комментаpий всегда начинаются на любой строке исходного модуля с символа точка с запятой (;) и Ассемблер полагает в этом случае, что все символы,… ;Эта строка полностью является комментарием ADD AX,BX ;Комментарий на одной строке с командой

Формат кодирования

[метка] команда [операнд(ы)] Метка (если имеется), команда и операнд (если имеется) pазделяются по крайней… COUNT DB 1 ;Имя, команда, один операнд

Метки

Метка в языке Ассемблера может содержать следующие символы:

Буквы: от A до Z и от a до z

Цифры: от 0 до 9

Спецсимволы: знак вопроса (?) точка (.) (только первый символ) знак «коммерческое эт» (@) подчеркивание (-) доллар ($)

Первым символом в метке должна быть буква или спецсимвол. Ассемблер не делает различия между заглавными и строчными буквами. Максимальная длина метки — 31 символ.

Примеры меток:

COUNT

PAGE25

$E10

Рекомендуется использовать описательные и смысловые метки. Имена регистров, например, AX, DI или AL являются зарезервированными и используются только для указания соответствующих регистров. Например, в команде

ADD AX,BX

Ассемблер «знает», что AX и BX относится к регистрам. Однако, в команде

MOV REGSAVE,AX

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

Команда

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

В сегменте кода команда определяет действие, например, пересылка (MOV) или сложение (ADD).

Операнд

В случае, если команда специфицирует выполняемое действие, то операнд определяет начальное значение данных или элементы, над которыми выполняется действие по команде.

В следующем примере байт COUNTER определен в сегменте данных и имеет нулевое значение:

COUNTER DB 0 ;Определить б айт (DB) с нулевым значением

Команда может иметь один или два операнда, или вообще быть без операндов.

Рассмотрим следующие три примера:

Нет операндов

RET ;Вернуться

Один операнд

INC CX ;Увеличить CX

Два операнда

ADD AX,12 ;Прибавить 12 к AX

Метка, команда и операнд не обязательно должны начинаться с какой-либо определенной позиции в строке. Однако, рекомендуется записывать их в колонку для большей yдобочитаемости программы. Для этого, например, редактор DOS EDLIN обеспечивает табуляцию через каждые восемь позиций.

 

Директивы

Эти операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования программы и не генерируют…  

Директива PAGE

PAGE 60,132 Количество строк на странице может быть в пределах от 10 до 255, а символов в… PAGE 66,80

Директива TITLE

TITLE текст Рекомендуется в качестве текста использовать имя программы, под которым она… TITLE ASMSORT — Ассемблерная программа сортировки имен

Директива SEGMENT

Имя Директива Операнд имя SEGMENT [параметры] ... ...

Выравнивание

Данный параметр определяет границу начала сегмента. Обычным значением является PARA, по которому сегмент устанавливается на границу параграфа. В этом случае начальный адрес делится на 16 без остатка, то есть, имеет шест. адрес nnn0. В случае отсутствия этого операнда Ассемблер принимает по умолчанию PARA.

Объединение

Сегмент стека определяется следующим образом: имя SEGMENT PARA STACK Когда отдельно ассемблированные программы должны объединяться компоновщиком, то можно использовать типы: PUBLIC,…

Класс

Данный элемент, заключенный в апострофы, используется для группирования относительных сегментов при компоновке:

имя SEGMENT PARA STACK 'Stack'

Директива PROC

имя-сегмента SEGMENT PARA имя-процедуры PROC FAR

Директива ASSUME

Ассемблеру необходимо сообщить назначение каждого сегмента. Для этой цели служит директива ASSUME, кодируемая в сегменте кода следующим образом: Директива Операнд ASSUME SS:имя_стека,DS:имя_с_данных, CS:имя_с_кода Например, SS:имя_стека указывает, что Ассемблер должен ассоциировать имя сегмента стека с регистром SS. Операнды могут…

Директива END

  Директива Операнд END [имя_процедуры] Операнд может быть опущен, если программа не предназначена для выполнения, например, если ассемблируются только…

Память и регистры

MOV AX,BX ;Переслать содержимое BX в регистр AX MOV AX,WORDA ;Переслать содержимое WORDA в регистр AX MOV AX,[BX] ;Переслать содержимое памяти по адресу ; в регистре BX в регистр AX

Инициализация программы

Рассмотрим требования к EXE-программам. DOS имеет четыре требования для инициализации ассемблерной EXE-программы: 1) указать Ассемблеру, какие cегментные регистры должны соответствовать… 2) сохранить в стеке адрес, находящийся в регистре DS, когда программа начнет выполнение;

Лекция 9. Ввод и выполнение программ

 

Ввод программы

Для ввода исходной программы наберите команду: EDLIN имя программы.ASM [Enter] В результате DOS загрузит EDLIN в памяти и появится сообщение «New file» и приглашение «*-». Введите команду I для…

Подготовка программы для выполнения

Шаг ассемблирования включает в себя трансляцию исходного кода в машинный объектный код и генерацию OBJ-модуля. OBJ-модуль уже более приближен к… Шаг компоновки включает преобразование OBJ-модуля в EXE (исполнимый) модуль,… 1. Завершает формирование в OBJ-модуле адресов, которые остались неопределенными после ассемблирования. Во многих…

Ассемблирование программы

Простейший вариант вызова программы ассемблирования — это ввод команды MASM (или ASM), что приведет к загрузке программы Ассемблера с диска в… source filename [.ASM]: object filename [filename.OBJ]:

Двухпроходный Ассемблер

В первом проходе Ассемблер просматривает всю исходную прогpамму и строит таблицу идентификаторов, используемых в программе, то есть, имен полей… Во втором проходе Ассемблер использует таблицу идентификаторов, построенную в…  

Компоновка программы

Для компоновки ассемблированной программы введите команду LINKи нажмите клавишу Enter. После загрузки в память, компоновщик выдает несколько… Object Modules [.OBJ]: имя программы Компонует имя программы.OBJ

Выполнение программы

C:имя программы.EXE или C:имя программы DOS предполагает, что файл имеет тип EXE (или COM), и загружает файл для… DEBUG C:имя программы.EXE

Файл перекрестных ссылок

cross-reference [NUL.CRF]:C: [Enter] Далее необходимо преобразовать полученный CRF-файл в отсортиpованную таблицу… После успешного ассемблирования введите команду CREF. На экране появится два запроса:

Лекция 10.

Алгоритмы работы Ассемблеров. Двухпроходный Ассемблер — первый проход

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

Определение длины команды

Обнаружение литералов

Требует, как минимум, выделения операндов команды.

Листинг

Ошибки

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

Некоторые структуры данных 1-го прохода

Таблица директив содержит одну строку для каждой директивы Обработка каждой директивы происходит по индивидуальному алгоритму, поэтому параметры… Таблица символов является основным результатом 1-го прохода Ассемблера. Каждое… Перемещаемость рассматривается в разделе, посвященном Загрузчикам, здесь укажем только, что значение перемещаемого…

Структура таблиц Ассемблера

Таблицы команд и директив являются постоянной базой данных. Они заполняются один раз — при разработке Ассемблера, а затем остаются неизменными. Эти таблицы целесообразно строить как таблицы прямого доступа с функцией… Имеет смысл постараться и подобрать функцию хеширования такой, чтобы в таблице не было коллизий. Поскольку заполнение…

Двухпроходный Ассемблер — второй проход

  Текст исходного оператора нужен только для печати листинга, Ассемблер на 2-м… Некоторые общие соображения, касающиеся этой работы. Объектный код команды состоит из поля кода операции и одного или…

Некоторые дополнительные директивы

OGR Установка адреса

В абсолютных программах директива применяется для размещения программы по абсолютным адресам памяти.

START/ SECT

На 1-м проходе Ассемблер составляет список секций, и только в конце 1-го прохода определяет их длины и относительные адреса в программе. На 2-м…

Директивы связывания

ENT Входная точка

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

EXT Внешняя точка

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

Эти директивы обрабатываются на 2-м проходе, и на их основе строятся таблицы связываний и перемещений.

Одно- и многопроходный Ассемблер

Можно ли построить однопроходный Ассемблер? Трудность состоит в том, что в программе имя может появиться в поле операнда команды прежде, чем это имя… Запретить ссылки вперед. Имя должно появляться в поле операнда только после… Если объектный модуль сохраняется в объектной памяти, то Ассемблер может отложить формирование кода для операнда —…

Лекция 11. Логика и организация программы

Команда JMP

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

Безусловный переход

Цикл: LOOP Условный переход:

Команда LOOP

Аналогично команде JMP, операнд команды LOOP определяет расстояние от конца команды LOOP до адреса метки, которое прибавляется к содержимому… «Relative jump out of range» (превышены границы перехода) Для проверки команды LOOP рекомендуется изменить соответствующим образом программу, выполнить ее ассемблирование,…

Флаговый регистр

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

Номер бита: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Флаг: * * * * O D I T S Z * A * P * C

Рассмотрим эти флаги в последовательности справа налево.

CF (Carry Flag) — флаг переноса

Содержит значение «переносов» (0 или 1) из старшего разряда при арифметических операциях и некоторых операциях сдвига и циклического сдвига.

PF (Parity Flag) — флаг четности

Проверяет младшие восемь бит pезультатов операций над данными. Нечетное число бит приводит к установке этого флага в 0, а четное — в 1. Не следует путать флаг четности с битом контроля на четность.

AF (Auxiliary Carry Flag) — дополнительный флаг переноса

Устанавливается в 1, если арифметическая операция приводит к переносу четвертого справа бита (бит номер 3) в регистровой однобайтовой команде.Данный флаг имеет отношение к арифметическим операциям над символами кода ASCII и к десятичным упакованным полям.

ZF (Zero Flag) — флаг нуля

Устанавливается в качестве результата aрифметических команд и команд сравнения. Как это ни странно, ненулевой результат приводит к установке нулевого значения этого флага, а нулевой — к установке единичного значения. Кажущееся несоответствие является, однако, логически правильным, так как 0 обозначает «нет» (то есть, результат не равен нулю), а единица обозначаeт «да» (то есть, результат равен нулю).

Команды условного перехода JE и JZ проверяют этот флаг.

SF (SIgn Flag) — знаковый флаг

Устанавливается в соответствии со знаком результата (старшего бита) после арифметических опеpаций: положительный результат устанавливает 0, а отрицательный — 1. Команды условного перехода JG и JL проверяют этот флаг.

TF (Trap Flag) — флаг пошагового выполнения

Этот флаг вам уже приходилось устанавливать, когда использовалась команда Т в отладчике DEBUG. В случае, если этот флаг установлен в единичное cостояние, то процессор переходит в режим пошагового выполнения команд, то есть, в каждый момент выполняется одна команда под пользовательским управлением.

IF (Interrupt Flag) — флаг прерывания

При нулевом состоянии этого флага прерывания запрещены, при единичном — разрешены.

DF (DIrection Flag) — флаг направления

Используется в строковых операциях для определения направления передачи данных. При нулевом состоянии команда увеличивает содержимое регистров SI и DI, вызывая передачу данных слева направо, при нулевом — уменьшает содержимое этих регистров, вызывая передачу данных справа налево.

OF (Overflow Flag) — флаг переполнения

В качестве примера: команда CMP сравнивает два операнда и воздействует на флаги AF, CF, OF, PF, SF, ZF. Однако, нет необходимости проверять все эти… CMP BX,00 ;Сравнение BX с нулем JZ B50 ;Переход на B50 если нуль

Команды условного перехода

Команду LOOP в программе можно заменить на две команды: одна уменьшает содержимое регистра CX, а другая выполняет условный переход: LOOP A20 DEC CX

Знаковые и беззнаковые данные

В качестве примера предположим, что регистр AX содержит 11000110, а BX — 00010110. Команда: CMP AX,BX сравнивает содержимое регистров AX и BX. В случае, если данные беззнаковые, то значение в AX больше, а если знаковые —…

Процедуры и оператор CALL

Ранее примеры содержали в кодовом сегменте только oдну процедуру, оформленную следующим образом:

BEGIN PROC FAR

.

.

BEGIN ENDP

Операнд FAR информирует систему о том, что данный адрес является точкой входа для выполнения, а директива ENDP определяет конец процедуры.

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

Обратите внимание на следующие особенности:

uДирективы PROC по меткам имеют операнд NEAR для указания того, что эти процедуры находятся в текущем кодовом сегменте.

uКаждая процедура имеет уникальное имя и содержит собственную директиву ENDP для указания конца процедуры.

uДля передачи управления в процедуре BEGIN имеются две команды: CALL. В результате первой команды CALL управление передается указанной процедуре и начинается ее выполнение. Достигнув команды RET, управление возвращается на команду непосредственно следующую за первой командой CALL. Вторая команда CALL действует аналогично — передает управление в указанную процедуру, выполняет ее команды и возвращает управление по команде RET.

uКоманда RET всегда выполняет возврат в вызывающую программу.

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

Использование процедур дает хорошую возможность организовать логическую структуру программы. Кроме того, операнды для команды CALL могут иметь значения, выходящие за границу от -128 до +127 байт.

Технически управление в процедуру типа NEAR может быть передано с помощью команд перехода или даже обычным построчным кодированием. Но в большинстве случаев рекомендуется использовать команду CALL для передачи управления в процедуру и команду RET для возврата.

Сегмент стека

Естественно для этих программ требуется стек oчень малого размера. Однако, команда CALL автоматически записывает в стек относительный адрес команды,… Таким образом, команды PUSH записывают в стек двухбайтовые адреса или другие… Команды PUSH, PUSHF, CALL, INT, и INTO заносят в стек адрес возврата или содержимое флагового регистра. Команды POP,…

DS и ES

Адрес префикса программного сегмента — область в 256 (шест. 100) байт, которая предшествует выполняемому программному модулю в памяти.

CS

Адрес точки входа в программу (адрес первой выполняемой команды).

IP

Нуль.

SS

Адрес сегмента стека.

Команды логических операций: AND, OR, XOR, TEST, NOT

Логические операции являются важным элементом в проектировании микросхем и имеют много общего в логике программирования. Команды AND, OR, XOR и TEST — являются командами логических операций. Эти команды используются для сброса и установки бит и для арифметических операций в коде ASCII. Все эти команды обрабатывают один байт или одно слово в регистре или в памяти, и устанавливают флаги CF, OF, PF, SF, ZF.

AND

В случае, если оба из сравниваемых битов равны 1, то результат равен 1; во всех остальных случаях результат — 0.

OR

В случае, если хотя бы один из сравниваемых битов равен 1, то результат равен 1; если сравниваемые биты равны 0, то результат — 0.

XOR

В случае, если один из сравниваемых битов равен 0, а другой равен 1, то результат равен 1; если сравниваемые биты одинаковы (оба — 0 или оба — 1) то результат — 0.

TEST

Действует как AND — устанавливает флаги, но не изменяет биты.

 

Первый операнд в логических командах указывает на один байт или слово в регистре или в памяти и является единственным значением, которое может изменятся после выполнения команд. В следующих командах AND, OR и XOR используются одинаковые битовые значения:

AND OR XOR 0101 0101 0101 0011 0011 0011

Результат:

0001 0111 0110

Для следующих несвязанных примеров, предположим, что AL содержит 1100 0101, а BH содержит 0101 1100:

1. AND AL,BH ;Устанавливает в AL 0100 0100

2. OR BH,AL ;Устанавливает в BH 1101 1101

3. XOR AL,AL ;Устанавливает в AL 0000 0000

4. AND AL,00 ;Устанавливает в AL 0000 0000

5. AND AL,0FH ;Устанавливает в AL 0000 0101

6. OR CL,CL ;Устанавливает флаги SF и ZF

Примеры 3 и 4 демонстрируют способ очистки регистра. В примере 5 обнуляются левые четыре бита регистра AL. Хотя команды сравнения CMP могут быть понятнее, можно применить команду OR для следующих целей:

1. OR CX,CX ;Проверка CX на нуль JZ ... ;Переход, если нуль

2. OR CX,CX ;Проверка знака в CX JS ... ;Переход, если отрицательно

Команда TEST действует аналогично команде AND, но устанавливает только флаги, а операнд не изменяется. Ниже приведено несколько примеров:

1. TEST BL,11110000B ;Любой из левых бит в BL JNZ ... ; равен единице?

2. TEST AL,00000001B ;Регистр AL содержит JNZ ... ; нечетное значение?

3. TEST DX,OFFH ;Регистр DX содержит JZ ... ; нулевое значение?

Еще одна логическая команда NOT устанавливает обpатное значение бит в байте или в слове, в регистре или в памяти: нули становятся единицами, а единицы — нулями. В случае, если, например, pегистр AL содержит 1100 0101, то команда NOT AL изменяет это значение на 0011 1010. Флаги не меняются.

Команда NOT не эквивалентна команде NEG, которая меняет значение с положительного на отрицательное и наоборот, посредством замены бит на противоположное значение и прибавления единицы.

Изменение строчных букв на заглавные

Единственная pазница в том, что пятый бит равен 0 для заглавных букв и 1 для строчных: Буква A: 01000001 Буква a: 01100001

Команды сдвига и циклического сдвига

uобрабатывают байт или слово; uимеют доступ к регистру или к памяти; uсдвигают влево или вправо;

Команды сдвига

Существуют следующие команды cдвига: SHR ;Логический (беззнаковый) сдвиг вправо SHL ;Логический (беззнаковый) сдвиг влево

Команды циклического сдвига

ROR ;Циклический сдвиг вправо ROL ;Циклический сдвиг влево RCR ;Циклический сдвиг вправо с переносом

Организация программ

1. Четко представляйте себе задачу, которую должна решить программа. 2. Сделайте эскиз задачи в общих чертах и спланируйте общую логику… Например, если необходимо проверить операции пеpесылки нескольких байт, начните c определения полей с пересылаемыми…

Лекция 12. Компоновка программ

Межсегментные вызовы

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

Атрибуты EXTRN и PUBLIC

Директива EXTRN

Директива EXTRN имеет следующий формат:

EXTRN имя:тип [, ... ]

Можно определить более одного имени (до конца строки) или закодировать дополнительные директивы EXTRN.

В другом ассемблерном модуле соответствующее имя должно быть определено и идентифицировано как PUBLIC.

Тип элемента может быть ABS, BYTE, DWORD, FAR, NEAR, WORD. Имя может быть определено через EQU и должно удовлетворять реальному определению имени.

Директива PUBLIC

PUBLIC идентификатор [, ... ] Можно определить более одного идентификатора (до конца строки) или… Неправильными идентификаторами являются имена регистров и EQU-идентификаторы, определяющие значения более двух байт. …

Компоновка программ на языке С и Ассемблере

uБольшинство версий языка C обеспечивают передачу параметров через стек в обратной (по сравнению с другими языками) последовательности. Обычно… uНекоторые версии языка C различают прописные и строчные буквы, поэтому имя… uВ некоторых версиях языка C требуется, чтобы ассемблерные программы, изменяющие регистры DI и SI, записывали их…

Выполнение COM-программы

Загруженным в память COM- и EXE-файлам предшествует префикс программного сегмента. Первые два байта этого префикса содержат команду INT 20H (возврат… Затем устанавливается указатель стека на конец 64 Кбайтового сегмента… При выходе из программы команда RET заносит в регистр IP нулевое слово, которое было записано в вершину стека при…

Выполнение EXE-программы

EXE-модуль, созданный компоновщиком, состоит из следующих двух частей: 1) заголовок — запись, содержащая информацию по управлению и настройке программы и 2) собственно загрузочный модуль.

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

Шест.4D5A

Компоновщик устанавливает этот код для идентификации правильного EXE-файла.

Число байтов в последнем блоке EXE-файла.

Число 512 байтовых блоков EXE-файла, включая заголовок.

Число настраиваемых элементов.

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

A

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

C

Переключатель загрузки в младшие или старшие адреса. При компоновке программист должен решить, должна ли его программа загружаться для выполнения в младшие адреса памяти или в старшие Обычным является загрузка в младшие адреса. Значение шест.0000 указывает на загрузку в старшие адреса, а шест.FFFF — в младшие. Иные значения определяют максимальное число параграфов, которые должны находиться после загруженной программы.

E

Относительный адрес сегмента стека в выполняемом модуле.

Адрес,который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль.

 

Контрольная сумма — сумма всех слов в файле (без учета переполнений) используется для проверки потери данных.

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

Относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS.

Смещение первого настраиваемого элемента в файле.

A

Номер оверлейного фрагмента: нуль обозначает, что заголовок относится к резидентной части EXE-файла.

C

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

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

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

uСчитывает форматированную часть заголовка в память.

uВычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента.

uСчитывает элементы таблицы настройки в рабочую область и прибавляет значения каждого элемента таблицы к началу сегмента (позиция OE).

uУстанавливает в регистрах SS и SP значения из заголовка и прибавляет адрес начала сегмента.

uУстанавливает в регистрах DS и ES сегментный адрес префикса программного сегмента.

uУстанавливает в регистре CS адрес PSP и прибавляет величину смещения в заголовке (позиция 16) к регистру CS. В случае, если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (шест.100). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, то есть, начальный адрес программы.

После инициализации регистры CS и SS содержат правильные адреса, а регистр DS (и ES) должны быть установлены в программе для их собственных сегментов данных:

1. PUSH DS ;Занести адрес PSP в стек

2. SUB AX,AX ;Занести нулевое значение в стек

3. PUSH AX ; для обеспечения выхода из программы

4. MOV AX,datasegname ;Установка в регистре DX

5. MOV DS,AX ; адреса сегмента данных

При завершении программы команда RET заносит в регистр IP нулевое значение, которое было помещено в стек в начале выполнения программы. В регистровой паре CS:IP в этом случае получается адрес, который является адресом первого байта PSP, где расположена команда INT 20H. Когда эта команда будет выполнена, управление перейдет в DOS.

Функции загрузки и выполнения программы

Рассмотрим теперь, как можно загрузить и выполнить программу из другой программы. Функция шест.4B дает возможность одной программе загрузить другую программу в память и при необходимости выполнить.

Для этой функции необходимо загрузить адрес ASCIIZ-строки в регистр DX, а адрес блока параметров в регистр BX (в действительности в регистровую пару ES:BX). В регистре AL устанавливается номер функции 0 или 3:

AL=0. Загрузка и выполнение

Блок параметров, адресуемый по ES:BX, имеет следующий формат: Двухбайтовый сегментный адрес строки параметров для передачи. Четырехбайтовый указатель на командную строку в PSP+80H.

AL=3. Оверлейная загрузка

Таким образом можно создавать оверлейные программы. Блок параметров адресуется по регистровой паре ES:BX и имеет следующий формат: Двухбайтовый адрес сегмента для загрузки файла. Двухбайтовый фактор настройки загрузочного модуля.

– Конец работы –

Используемые теги: Свойства, операторов, работы, экраном0.071

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Свойства операторов работы с экраном

Что будем делать с полученным материалом:

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

Еще рефераты, курсовые, дипломные работы на эту тему:

Контрольная работа МЕТОДИЧЕСКИЕ УКАЗАНИЯ Для самостоятельной работы и к выполнению контрольной работы для студентов заочного обучения всех специальностей
Информатика... Контрольная работа... Для направлений бакалавриата Землеустройство и кадастры...

Тип ячейки определяет строение и свойства кристалла в целом, а свойства каждого из этих кристаллов определяет свойства всего кристалла в целом
Кристаллическое строение металлов... Металлы Ме являются поликристаллическими веществами т е они состоят из... Кристаллическое состояние твердое состояние вещества...

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ТЕХНОЛОГИИ СОЦИАЛЬНОЙ РАБОТЫ. ОБЩИЕ ТЕХНОЛОГИИ СОЦИАЛЬНОЙ РАБОТЫ. МЕЖДИСЦИПЛИНАРНЫЕ ТЕХНОЛОГИИ И МЕТОДИКИ СОЦИАЛЬНОЙ РАБОТЫ
Учебник подготовлен коллективом авторов... гл канд искусствовед наук проф Т В Шеляг гл д р... наук проф П Д Павленок...

Организационный этап выполнения курсовой работы 2.1 Примерная тематика курсовой работы . 3 Основной этап выполнения курсовой работы 3.1.1 Назначение и место ученого предмета дисциплины
стр Введение... Введение Реформирование национальной системы высшего образования связанное с введением нового перечня специальностей общегосударственного классификатора...

Понятие воспитательной работы. Роль и место воспитательной работы в системе работы с кадрами
Это, в свою очередь, требует повышения уровня воспитательной работы с личным составом, выделения приоритетов в системе воспитания личного состава,… Вместе с тем в современных условиях принимаемые меры воспитательного… Коллегия МВД России на заседании 23 декабря 1998 г рассмотрев состояние работы с кадрами в системе кадровой политики…

Задания для выполнения контрольной работы и лабораторной работы для самостоятельной работы студентов Менеджмент и маркетинг
На сайте allrefs.net читайте: "Задания для выполнения контрольной работы и лабораторной работы для самостоятельной работы студентов Менеджмент и маркетинг"

Конспект лекций по учебной дисциплине ПМ 04. Выполнение работ по одной или нескольким профессиям рабочих, должностям служащих МДК 04.01. Технология работ по эксплуатации и ремонту газового оборудования
Государственное бюджетное образовательное учреждение... Саратовской области... cреднего профессионального образования...

Пример выполнения контрольной работы В данном документе показаны способы выполнения заданий в Excel, типичных для всех вариантов контрольной работы №2
В данном документе показаны способы выполнения заданий в Excel типичных для всех вариантов контрольной работы В отчет по работе который... Имеется таблица с наименованиями работ В таблице приведены данные по учету выполнения этих работ бригадами...

СД.09.04 ТЕХНОЛОГИЯ И ОРГАНИЗАЦИЯ СТРОИТЕЛЬНЫХ РАБОТ Курсовая работа. Составление календарных графиков (линейного и сетевого) и стройгенплана строительства гидромелиоративной системы
Кафедра... Природообустройства строительства и гидравлики...

Об утверждении перечня тяжелых работ и работ с вредными или опасными условиями труда
На сайте allrefs.net читайте: "Об утверждении перечня тяжелых работ и работ с вредными или опасными условиями труда"

0.036
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам