Реферат Курсовая Конспект
ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ - раздел Философия, Министерство Связи И Информатизации Республики Беларусь Учр...
|
МИНИСТЕРСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ
РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«ВЫСШИЙ ГОСУДАРСТВЕННЫЙ КОЛЛЕДЖ СВЯЗИ»
ВИТЕБСКИЙ ФИЛИАЛ
Кафедра программного обеспечения сетей телекоммуникаций
ВВЕДЕНИЕ
Рассмотрены возможности использования в 16-разрядных приложениях реального режима средств современных 32-разрядных процессоров.
Пособие предназначено для учащихся специальности
2–45 01 33 – Сети телекоммуникаций дневной формы обучения, изучающих дисциплину «Основы алгоритмизации и программирования».
НАБОР РЕГИСТРОВ
Регистрами называются области высокоскоростной памяти, расположенные внутри процессора в непосредственной близости от его исполнительного ядра. Доступ к ним осуществляется намного быстрее, чем к ячейкам оперативной памяти.
Первые модели микропроцессоров i8086/8088 имели 14 16-разрядных регистров. Далее, начиная с i386, регистры были расширены до 32-разрядных. А последние модели (Pentium и др.) содержит гораздо большее число регистров, большинство из них 64-разрядные. Но в современных микропроцессорах можно выделить часть, предназначенную для использования в реальном режиме и практически соответствующую процессору i8086. Именно эту часть мы и будем рассматривать далее.
Регистры делятся на регистры общего назначения, сегментные регистры и регистры состояния и управления.
ОРГАНИЗАЦИЯ ПАМЯТИ
Физическая память, к которой микропроцессор имеет доступ по шине адреса, называется оперативной памятью (ОЗУ). Оперативную память физически выполнена в виде микросхем и предназначена для временного хранения программ и данных. Оперативная память организована как последовательность ячеек – байтов. Каждому байту соответствует свой уникальный адрес (его номер), называемый физическим.
Символы
Символы в компьютере храняться в виде числового кода. Наиболее распространённым является американский стандартный код для обмена информацией (ASCII). Символы могут быть управляющими (коды 0..31, 127) и видимыми (коды 32..127), остальные коды (128..255) были выделены для национальных символов и символов псевдографики.
Целые числа
Целые числа со знаком – двоичное значение, занимающие 8, 16 или 32 бита памяти Знак в этом двоичном числе содержится в 7, 15 или 31 бите соответственно. Ноль в этих битах операндов соответствует положительному числу, а единица - отрицательному. Отрицательные числа представляется в дополнительном коде. Числовые диапазоны для этого типа данных следующие:
8-разрядное целое – от –128 до +127;
16-разрядное целое – от –32768 до +32767;
32-разрядное целое – от –231 до +231 –1.
Целый тип без знака – двоичное значение без знака размером 8, 16 или 32 бита. Числовой диапазон для этого типа следующий:
8-разрядное целое – от 0 до 255;
16-разрядное целое – от 0 до 65535;
32-разрядное целое – от 0 до 232 – 1.
Указатель на память
Указатели на память бывают двух типов:
ближний тип – 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента;
дальний тип – 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части и 32-разрядного смещения.
Цепочки
Цепочка – это некоторый непрерывный набор байтов, слов или двойных слов максимальной длиной до 4 Гбайт.
СПОСОБЫ ЗАДАНИЯ ОПЕРАНДОВ
Косвенная адресация
Остальные виды адресации относятся к косвенным. Слово «косвенный» в названии этих видов адресации означает, что в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах, на которые указывают своим содержимым байт mod r/m и, возможно, байт sib.
Косвенная адресация имеет следующие разновидности:
· косвенная базовая, или регистровая, адресация;
· косвенная базовая адресация со смещением;
· косвенная индексная адресация со смещением;
· косвенная базовая индексная адресация;
· косвенная базовая индексная адресация со смещением.
Косвенная базовая адресация
При косвенной базовой (регистровой) адресации эффективный адрес операнда может находиться в любом из регистров общего назначения, кроме SP и ВР (это специальные регистры для работы с сегментом стека).
Синтаксически в команде этот режим адресации выражается заключением имени регистра в квадратные скобки. К примеру, команда mov ax,[cx] помещает в регистр АХ содержимое слова по адресу сегмента данных со смещением, хранящимся в регистре СХ. Так как содержимое регистра легко изменить в ходе работы программы, данный способ адресации позволяет динамически назначить адрес операнда для некоторой машинной команды. Это очень полезно, например, для организации циклических вычислений и для работы с различными структурами данных типа таблиц или массивов.
Косвенная базовая индексная адресация
При косвенной базовой индексной адресации эффективный адрес формируется как сумма содержимого двух регистров общего назначения: базового и индексного. В качестве этих регистров могут применяться любые регистры общего назначения, при этом часто содержимое индексного регистра масштабируется. Например: mov ах,[si][dx ] В данном примере эффективный адрес второго операнда формируется из двух компонентов, (SI) + (DX).
Косвенная базовая индексная адресация со смещением
Косвенная базовая индексная адресация со смещением является дополнением косвенной индексной адресации. Эффективный адрес формируется как сумма трех составляющих: содержимого базового регистра, содержимого индексного регистра и значения поля смещения в команде. К примеру, команда mov ax,[si+5][dx] пересылает в регистр АХ двойное слово по адресу: (SI) + 5 + (DX). Команда add ax,array[si][bx] складывает содержимое регистра АХ с содержимым слова по адресу, образованному значением идентификатора array + (SI) + (ВХ).
ОПЕРАТОРЫ
Операнд команды может быть выражением, представляющим собой комбинации операндов и операторов ассемблера. Транслятор ассемблера рассматривает выражение как единое целое и преобразует его в числовую константу. Логически значением этой константы может быть адрес некоторой ячейки памяти или некоторое абсолютное значение.
Таблица 6. - Операторы и их приоритет
Оператор | Приоритет |
LENGTH, SIZE, WIDTH, MASK, ( , ), [ ,], <, > | |
. | |
: | |
PTR, OFFSET, SEG, TYPE, THIS | |
HIGH, LOW | |
+, – (унарные) | |
*, / , MOD, SHL, SHR | |
+, – (бинарные) | |
EQ, NE, LT, LE, GT, GE | |
NOT | |
AND | |
OR, XOR | |
SHORT, TYPE |
Операторы с одинаковыми приоритетами обрабатываются последовательно слева направо. Изменение порядка выполнения возможно путем расстановки круглых скобок, которые имеют наивысший приоритет.
§ Арифметические операторы. К ним относятся унарные операторы “+” и “–”, бинарные “+” и “–”, операторы умножения “*”, целочисленного деления “/”, получения остатка от деления “mod”.Например:
tab_size equ 50 ; размер массива в байтах
size_el equ 2 ; размер элементов
mov cx,tab_size/size_el ; вычисляется число элементов массива и заносится в регистр сх
§ Операторы сдвига выполняют сдвиг выражения на указанное количество разрядов вправо (SHR) и влево (SHL). Например:
mask_b equ 10111011
...
mov a,.mask_b shr 3 ; al=00010111
§ Операторы сравнения (возвращают значения «истина» или «ложь») предназначены для формирования логических выражений. Логическое значение «истина» соответствует логической единице, а «ложь» – логическому нулю. Логическая единица – это значение, все биты которого равны 1. Например:
tab size equ 30 ; размер таблицы
mov al, tab size ge 50 ; загрузка "ложь" в al
cmp al, 0 ; если tab size < 50, mo
je ml ; переход на ml
ml:...
В этом примере, если значение tab_size больше или равно 50, то результат в al равен 0ffh, а если tab_size меньше 50, то al равно 00h. Команда cmp сравнивает значение al с нулем и устанавливает соответствующие флаги в flаgs/eflags. Команда je на основе анализа этих флагов передает или не передает управление на метку ml.
Таблица 7. – Операторы сравнения
Оператор | Значение |
EQ | ИСТИНА, если выражение 1 равно выражению 2 |
NE | ИСТИНА, если выражение 1 не равно выражению 2 |
LT | ИСТИНА, если выражение 1 меньше выражению 2 |
LE | ИСТИНА, если выражение1 меньше или равно выражению2 |
GT | ИСТИНА, если выражение 1 больше выражения 2 |
GE | ИСТИНА, если выражение 1 больше или равно выражению 2 |
§ Логические операторы (and, or, xor) выполняют побитовые операции над выражениями. Выражения должны быть абсолютными, то есть такими, численное значение которых может быть вычислено транслятором. Например:
flags equ 10010011
mov al, flags xor 01h; пересылка в al поля flags с инвертированным младшим битом
§ Индексный оператор [ ]. Транслятор воспринимает скобки как указание сложить значение выражения перед этими скобками со значением выражения, заключенным в скобки. Например:
mov ax,mas[si]; пересылка слова по адресу mas+[si] в регистр ах.
§ Оператор переопределения типаPTR применяется для переопределения или уточнения типа метки или переменной. Тип может принимать одно из следующих значений: byte, word, dword, qword, tbyte, near, far. Например:
d_wrd dd 0
mov al,byte ptr d_wrd+1; пересылка второго байта из двойного слова
Переменная d_wrd имеет тип двойного слова. Если есть необходимость обращения не ко всему значению переменной, а только к одному из входящих в нее байтов, то нельзя это сделать командой, например, mov al,d_wrd+l, так как транслятор выдаст сообщение о несовпадении типов операндов. Оператор PTR позволяет непосредственно в команде переопределить тип и выполнить команду.
§ Оператор переопределения сегмента : (двоеточие) вычисляет физический адрес относительно конкретно задаваемой сегментной составляющей: "имя сегментного регистра", "имя сегмента" из соответствующей директивы SEGMENT или "имя группы".
§ Оператор именования типа структуры . (точка) также заставляет транслятор производить определенные вычисления, если он встречается в выражении.
§ Оператор получения сегментной составляющей адреса выраженияSEGвозвращает физический адрес сегмента для выражения, в качестве которого могут выступать метка, переменная, имя сегмента, имя группы или некоторое символическое имя.
§ Оператор получения смещения выражения OFFSET позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение определено. Например:
.data
pole dw 5
.code
mov ax,seg pole
mov es,ax
mov dx,offset pole ; теперь в паре es:dx полный адрес переменной pole
ФУНКЦИОНАЛЬНАЯ КЛАССИФИКАЦИЯ МАШИННЫХ КОМАНД
Рисунок 10. Функциональная классификация целочисленных команд процессора
КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ
Ввод из порта и вывод в порт
Порт ввода-вывода может быть операндам машинной команды. Физически порт ввода-вывода представляет собой регистр разрядностью 8, 16 или 32 бита. Доступ к устройствам ввода-вывода, системным устройствам компьютера осуществляется посредством их регистров, причем каждый из этих регистров должен иметь возможность уникальной идентификации. С этой целью архитектурно процессор поддерживает так называемое адресное пространство ввода-вывода.
Комаанды для работы с портами ввода-вывода:
in <аккумулятор>,<номер_порта> — ввод в аккумулятор из порта с номером <номер_порта>;
out <номер_порта>,<аккумулятор> — вывод содержимого аккумулятора в порт с номером <номер_порта>.
АРИФМЕТИЧЕСКИЕ КОМАНДЫ
Арифметические операции над целыми двоичными числами
Сложение двоичных чисел без знака
Микропроцессор выполняет сложение операндов по правилам сложения двоичных чисел. Для фиксирования выхода за разрядную сетку предназначен флаг переноса cf в бите 0 регистра флагов flags. Самый простой способ анализа флага cf – использовать команду jc(илиjnc).
Имеется три команды двоичного сложения:
– INC операнд – операция инкремента, то есть увеличение значения операнда на 1;
– ADD операнд1,операнд2 – команда сложения с принципом действия: операнд1 = операнд1 + операнд2;
ADCоперанд1,операнд2 – команда сложения с учетом флага переноса cf с принципом действия: операнд1 = операнд1 + операнд2 + cf.
Рассмотрим фрагмент программы вычисления суммы чисел 254 и 17.
…
.data
a db 254
. code
…
xor ax, ax ;обнуление ax
add al,17 ;помещение в al одного из слагаемых
add al,a ;сложение переменной а с al
jnc m1 ;если нет переноса, то переход на m1
adc ah, 0 ;в ax(ah) – сумма с учетом переноса
m1: …
Вычитание двоичных чисел со знаком
Для вычитания способом сложения чисел со знаком необходимо представить числа в дополнительном коде (и уменьшаемое, и вычитаемое). Результат тоже будет в дополнительном коде. Сложность здесь в том, что старший бит рассматривается как знаковый. Отследить эту ситуацию можно по флагу переполнения оf. Его установка в 1 говорит о том, что результат вышел за диапазон представления знаковых чисел (то есть изменился старший бит) для операнда данного размера, и программист должен предусмотреть действия по корректировке результата.
Умножение двоичных чисел со знаком
Для умножения чисел со знаком предназначена команда
IMULоперанд_1[,операнд_2,операнд_3].
Эта команда выполняется так же, как и команда mul.Отличие только в формировании знака. Если результат мал и умещается в одном регистре (cf=of=0), то содержимое другого регистра (старшей части) является расширением знака – все его биты равны старшему биту (знаковому разряду) младшей части результата. В противном случае (cf=of=1) знаком результата является знаковый бит старшей части результата, а знаковый бит младшей части является значащим битом двоичного кода результата.
Деление двоичных чисел со знаком
Для деления чисел со знаком предназначена команда
IDIVделитель.
Для этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком.
Команды преобразования типов
Эти команды используются, если операнды, участвующие в арифметических командах имеют разный размер. Вот некоторые из них:
CBW (Convert Byte to Word) – команда преобразования байта (в регистре AL) в слово (в регистре AX) путем распространения значения старшего бита AL на все биты регистра AH.
CWD (Convert Word to Double) – команда преобразования слова (в регистре AX) в двойное слово (в регистрах DX:AX) путем распространения значения старшего бита AX на все биты регистра DX.
ЛОГИЧЕСКИЕ КОМАНДЫ
Под логическим понимается такое преобразование данных, в основе которого лежат правила формальной логики. Формальная логика работает на уровне утверждений истинно (1) или ложно (0).
Команда безусловного перехода
Синтаксис команды безусловного перехода без сохранения информации о точке возврата:
JMP [модификатор] адрес_перехода
Здесь адрес_перехода представляет метку или адрес области памяти, в которой находится указатель перехода.
Условные переходы
Процессор поддерживает 18 команд условного перехода, позволяющих проверить:
· отношение между операндами со знаком (больше или меньше);
· отношение между операндами без знака (выше или ниже);
· состояниями арифметических флагов ZF, SF, CF, OF, PF (но не AF).
Команды условного перехода имеют одинаковый синтаксис:
Команда сравнения
Команда сравнения СМР (СоМРаге) имеет интересный принцип работы. Команда СМР так же, как и команда SUB, выполняет вычитание операндов и по результатам сравнения устанавливает флаги. Единственное, чего она не делает, — не записывает результат вычитания на место первого операнда.
Синтаксис команды СМР:
Команды условного перехода и регистр СХ
Регистр СХ имеет определенное функциональное назначение – он выполняет функции счетчика в командах управления циклами и при работе с цепочками символов.
Синтаксис команд JCXZ (Jump if ex is Zero — переход, если СХ ноль)
Jcxz метка_перехода
В отличие от других команд условной передачи управления, команда JCXZ может адресовать только короткие переходы — на -128 байт или на +127 байт от следующей за ней команды.
Loop метка_перехода
Команда реализует описанные далее действия.
1. Декремент регистра СХ.
2. Сравнение регистра СХ с нулем:
ü если (СХ) > 0, то управление передается на метку перехода;
ü если (СХ) = 0, то управление передается на следующую после LOOP команду.
Команды LOOPE и LOOPZ (Loop still сх <> 0 or Zero flag = 0 — повторить цикл пока СХ <> 0 или ZF = 0) — абсолютные синонимы. Синтаксис команд:
Loope/loopz метка_перехода
Команды реализуют описанные далее действия.
1. Декремент регистра СХ.
2. Сравнение регистра СХ с нулем и анализ состояния флага нуля ZF:
ü если (СХ) > 0 и ZF = 1, управление передается на метку перехода;
ü если (СХ) = 0 или ZF=0, управление передается на следующую после LOOP команду.
Команды LOOPNE и LOOPNZ (Loop still ex <> 0 or NonZero flag = 0 — повторить цикл, пока СХ <> 0 или ZF = 1) также абсолютные синонимы. Синтаксис команд:
ЛИТЕРАТУРА
Юров, В.И. Assembler. Учебник для вузов / В. И. Юров. – 2-е изд. – СПб. : Питер, 2006. – 637 с.
2. Голубь, Н. Г. Искусство программирования на Ассемблере / Н. Г. Глубь. – СПб. : ООО «ДиаСофтЮП», 2002. – 656 с.
Калашников, О.А. Ассемблер? Это просто! Учимся программировать / О. А. Калашников. – СПб. : БХВ-Петербург, 2005. – 384 с.
Финогенов, К.Г. Основы языка Ассемблера / К.Г.Финогенов. – М.: Радио и связь, 1999. – 28S с.
Абель, П. Язык Ассемблера для IBM PC и приложения / П.Абель. – М. : «Радио и связь», 1991. – 447 с.
Скэплон, Л. Персональные ЭВМ IBM PC и XT. Программирование на языке Ассемблер / Л. Скеплон. – М. : «Радио и связь», 1989. – 336 с.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ.. 3
ЭТАПЫ РАЗВИТИЯ ЭВМ... 4
МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ.. 6
АРХИТЕКТУРА ЭВМ... 8
НАБОР РЕГИСТРОВ.. 9
ОРГАНИЗАЦИЯ ПАМЯТИ.. 14
ТИПЫ ДАННЫХ.. 16
ФОРМАТ КОМАНД.. 19
ОБРАБОТКА ПРЕРЫВАНИЙ.. 21
СИНТАКСИС АССЕМБЛЕРА.. 26
ДИРЕКТИВЫ СЕГМЕНТАЦИИ.. 28
ДИРЕКТИВЫ РЕЗЕРВИРОВАНИЯ И ИНИЦИАЛИЗАЦИИ ДАННЫХ.. 35
СПОСОБЫ ЗАДАНИЯ ОПЕРАНДОВ.. 39
ОПЕРАТОРЫ... 42
ФУНКЦИОНАЛЬНАЯ КЛАССИФИКАЦИЯ МАШИННЫХ КОМАНД.. 46
КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ.. 46
АРИФМЕТИЧЕСКИЕ КОМАНДЫ... 57
ЛОГИЧЕСКИЕ КОМАНДЫ... 64
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ.. 68
ОРГАНИЗАЦИЯ ЦИКЛОВ.. 73
ЛИТЕРАТУРА.. 79
Учебное издание
– Конец работы –
Используемые теги: основы, алгоритмизации, программирования0.044
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов