Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Регистры общего назначенияПеречислим регистры, относящиеся к группе регистров общего назначения. Поскольку эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), их называют регистрами АЛУ: АХ/АН/Аl, (Accumulator register) - аккумулятор. Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно. BX/BH/BL (Base register) - базовый регистр, или регистр базы. Применяется для хранения базового адреса некоторого объекта, находящегося в памяти. CX/CH/CL (Count register)- регистр-счетчик. Применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в адгоршме работы соответствующей команды К примеру, команда организации цикла 1оор, кроме передачи управления команде, находящейся но некоторому адресу, анализирует и уменьшает на единицу значение регистра СХ. DX/DH/DL (Data register) - регистр данных. Так же, как и регистр АХ/АН/Аl, хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно. Следующие два регистра используются для поддержки так называемых цепочечных команд, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 16 или 8 бит: SI (Source Index register) - индекс источника. Этот регистр используется цепочечными командами и содержит текущий адрес элемента цепочки-источника. DI (Destination Index register) - индекс приемника. Этот регистр используется цепочечными командами и содержит текущий адрес цепочкиприемника. В архитектуре микропроцессора i8086 на программно-аппаратном уровне поддерживается такая структура данных, как стек. Для работы со стеком микропроцессор имеет специальный набор команд, а в программной модели микропроцессора для этою существуют специальные регистры: SР (Start Pointer register) - регистр указателя стека. Содержит указатель вершины стека в текущем сегменте стека. ВР (Base Pointer register) - регистр указателя базы кадра стека. Предназначен для организации произвольного доступа к данным внутри стека. Такой набор регистров может показаться неудобным, в силу своем жесткой функциональной ограниченности. Большинство регистров может использоваться при Программировании для хранения операндов практически В любых сочетаниях. Однако, как мы отметили выше, некоторые команды используют фиксированные регистры для выполнения своих действий. Это нужно обязательно учитывать. Использование жесткого закрепления регистров для некоторых команд уменьшает их функциональность, но позволяет более компактно кодировать их машинное представление. Знание этих особенностей позволит вам при необходимости хотя бы на несколько байт с экономить намять, занимаемую кодом вашей программы.
35. Структура МП Intel 80x86: Операционное устройство, Устройство шинного интерфейса Операционное устройство МП содержит группу общих регистров, арифметико-логическое устройство (АЛУ) и регистр флагов F. Устройство шинного интерфейса содержит блок сегментных регистров, указатель команд, сумматор адресов, очередь команд и буферы, обеспечивающие связь с шиной. Шинный интерфейс выполняет операции обмена между МП и памятью или портами ввода-вывода по запросам операционного устройства. Когда операционное устройство занято выполнением команды, шинный интерфейс самостоятельно инициирует опережающую выборку кодов очередных команд из памяти.
36. Регистр флагов был уже в первом 16-разрядном микропроцессоре Intel — 8086. Он носил имя FLAGS и имел длину 16 бит. Появление микропроцессора 80286 добавило в регистр FLAGS бит NT и битовое поле IOPL, однако сам регистр оставался 16-разрядным. С выходом микропроцессора 80386 регистр был расширен до 32 бит и стал называться EFLAGS. В нём появились ещё два дополнительных бита: VM и RF. В последующих поколениях 32-разрядных микропроцессоров были добавлены биты AC, VIF, VIP и ID. Тем не менее, сохранялась полная совместимость «снизу вверх»: любая старая программа, которая корректно работала с регистром EFLAGS, не модифицируя «неизвестные» ей биты, оставалась работоспособной и на последующих процессорах. Расширение разрядности процессора до 64 бит, первоначально произведённое компанией AMD (технология AMD64) и позже скопированное Intel (EM64T), удвоило и размер регистра флагов, получившего название RFLAGS. Однако его старшая половина (биты с 32-го по 63-й включительно) пока не используется и является зарезервированной, поэтому формат «значащей» части RFLAGS полностью совпадает с форматом EFLAGS. Назначение разрядов Править Формат регистра EFLAGS выглядит следующим образом: Заметим, что все неиспользуемые биты равны нулю. Исключением является бит 1, который всегда имеет единичное значение. Далее описывается назначение каждого бита, входящего в состав регистра флагов. Флаги состояния Править Эти флаги отражают результат, полученный в предыдущей арифметико-логической операции. Многие из них могут использоваться в дальнейшем для выполнения условных переходов или условных пересылок. Флаги этой группы могут изменяться любыми программами с помощью команд, заносящих в регистр флагов новое значение (SAHF, POPF/POPFD/POPFQ).
Флаг направления Править Этот флаг может изменяться любыми программами с помощью специальных инструкций CLD и STD, а также загрузкой нового содержимого регистра флагов.
Системные флаги Править Эти флаги могут изменяться только системным программным обеспечением, работающим при нулевом (наивысшем) текущем уровне привилегий (CPL). Исключением является флаг IF, состояние которого в определённых условиях может меняться менее привилегированным кодом. Загрузка регистров флагов программами, выполняющимися не на нулевом уровне привилегий, не изменяет значения системных флагов.
Оставшиеся команды микропроцессора 8088 управляют его работой. Многие из них устанавливают или сбрасывают некоторые флаги состояния. Установка флагов Есть три команды, которые непосредственно управляют состоянием флага переноса. Команды STC, CLC, CMC соответственно могут устанавлмвать, сбрасывать и изменять флаг переноса. Этот флаг - единственный, которому уделено такое внимание, и в первую очередь, благодаря важности флага переноса при операциях с повышенной точностью. Флаг переноса критичен на промежуточных шагах любых многословных операций. Возможность сбрасывать или устанавливать флаг переноса может помочь при циклической обработке с повышенной точностью. На Фиг. 4.31 показан пример использования команды CLC. Цикл внутри примера складывает отдельные байты двух 10-разрядных упакованных десятичных чисел. Программа выполняет цикл пять раз, так как за каждую итерацию она обрабатывает две цифры. Информация о переносе из одного оборота цикла в другой передается через флаг переноса. Команда CLC сбрасывает флаг переноса перед первым циклом для того, чтобы перед первым сложением не было переноса. Флаг переноса также важен в операциях сдвига, где он становится девятым или семнадцатым битом регистра во время выполнения операции.
Два флага состояния микропроцессора имеют специальные команды работающие с ними. Программа может установить или сбросить маску прерываний соответственно командами STI и CLI. Команда STI включает систему прерываний микропроцессора 8088, позволяя ему реагировать на внешние прерывания. Команда CLI блокирует систему внешних прерываний. Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:02:06 Фиг. 4.31 Десятичная арифметика повышенной точности Page 1-1
PAGE,132 TITLE Фиг. 4.31 Десятичная арифметика повышенной точности
0000 CODE SEGMENT ASSUME CS:CODE,DS:CODE
= 0005 NUMBER_LENGTH EQU 5; 5 байт для упакованного числа 0000 0005[ NUMBER_ONE DB NUMBER_LENGTH DUP (?) ?? ] 0005 0005[ NUMBER_TWO DB NUMBER_LENGTH DUP (?) ?? ] ;---------------------------------------- ; Эта программа складывает два десятичных упакованных ; числа (NUMBER_ONE и NUMBER_TWO) и заносит результат ; в NUMBER_TWO. ;----------------------------------------
000A START_ADD: 000A B9 0005 MOV CX, NUMBER_LENGTH; Определение длины чисел
;----- Установка индексных регистров на младший байт складываемых чисел
000D 8D 36 0004 R LEA SI, NUMBER_ONE + NUMBER_LENGTH - 1 0011 8D 3E 0009 R LEA DI, NUMBER_TWO + NUMBER_LENGTH - 1
0015 F8 CLC; Нет младших разрядов
0016 ADD_LOOP: 0016 8A 04 MOV AL, [SI]; Взять байт из первого числа 0018 12 05 ADC AL, [DI]; Добавить из второго с учетом переноса 001A 27 DAA; Коррекция до упакованного формата 001B 88 05 MOV [DI], AL; Занесение байта результата 001D 9C PUSHF; Сохранение флага переноса (CF) 001E 4E DEC SI; Сдвиг указателя первого числа 001F 4F DEC DI; Сдвиг указателя второго числа 0020 9D POPF; Восстановление флагов 0021 E2 F3 LOOP ADD_LOOP; Обработка следующего байта
0023 CODE ENDS END
Фиг. 4.31 Операции с BCD повышенной точности
Программа может установить или сбросить флаг направления с помощью команд STD и CLD. Команда CLD сбрасывает флаг направления, приводя к тому, что строковые команды ведут обработку при возрастающих адресах памяти. Команда STD устанавливает флаг, в результате чего строковые команды уменьшают адресный указатель после каждого выполнения.
37. структура файла ассемблер-программы Программа на ассемблере представляет собой набор предложений языка, каждое из которых занимает отдельную строку кода программы, в них м.б. записаны: - инструкции процессора, которые транслируются в машинный код программы; Также, каждая инструкция программы может иметь свою метку – имя, которое будет однозначно описывать местонахождение этой инструкции в программе. Имя метки пишется в самом начале строки и отделяется двоеточием. Для того чтобы создать из текста программы работоспособный исполняемый EXE-файл, необходимо выполнить два действия – создать из текста объектный файл (OBJ), а затем из объектного – исполняемый. Для этого, в командной строке ДОС необходимо выполнить две команды: tasm prog.asm – для трансляции программы в OBJ-файл Здесь prog.asm – имя исходного файла с текстом программы. Также, необходимо наличие в текущем каталоге файлов tasm.exe и tlink.exe. Директивы оформления программы Директивы SEGMENT, ASSUME, END и.386 Любая программа состоит из набора машинных команд и данных, которые во время выполнения находятся в памяти. Иногда для работы программы необходимо также дополнительное место, например под стек. В принципе, возможно совместное размещение команд, данных и стека в одном блоке памяти, но тогда появляется опасность при записи в стек или область данных повредить команды, а также усложнится отладка программы. Поэтому, целесообразнее будет использовать разные области памяти (сегменты) для хранения команд процессора, данных, и для реализации стека. Операционная система должна знать, сколько памяти необходимо выделять под программу, какие сегменты нужно определить при запуске, и чем их нужно заполнить, а также местонахождение команды, начиная с которой происходит выполнение программы – так называемой «точки входа». Вся эта и другая полезная информация находится в исполняемом файле программы. Для того чтобы транслятор ассемблера знал, в какой сегмент нужно положить определенные данные или команды, используется директива SEGMENT: <имя сегмента> SEGMENT [параметры] В качестве параметров можно указать дополнительную информацию о сегменте. Например, параметр STACK указывает операционной системе, что этот сегмент будет использоваться, как системный стек. 38. односегментные и многосегментные файлы Первый пример законченной программы, рассмотренный нами в гл. 2, относился к наиболее распространенному типу.ЕХЕ-приложений. Для такой программы характерно наличие отдельных сегментов команд, данных и стека; для адресации к полям каждого сегмента используется свой сегментный регистр. Удобство.ЕХЕ-программы заключается в том, что ее можно почти неограниченно расширять за счет увеличения числа сегментов. В случае большого объема вычислений в программу можно включить несколько сегментов команд, обеспечив, разумеется, переходы из сегмента в сегмент с помощью команд дальних переходов или дальних вызовов подпрограмм. Если же программа должна обрабатывать большие объемы данных, в ней можно предусмотреть несколько сегментов данных. Каждый сегмент не может иметь размер более 64 Кбайт, однако в сумме их объем ограничивается только наличной оперативной памятью. Правда, в реальном режиме затруднительно обратиться к памяти за пределами 1 Мбайт адресного пространства, так что максимальный размер программы, если не предусматривать в ней какие-то специальные средства поочередной загрузки сегментов, ограничен величиной 550... 600 Кбайт. Наличие в МП 86 лишь двух сегментных регистров данных (DS и ES) несколько усложняет алгоритмы обработки больших объемов данных, так как приходится постоянно переключать эти регистры с одного сегмента на другой. Однако реально в современных процессорах имеются не два, а четыре сегментных регистра данных (DS, ES, FS и GS), которые вполне можно использовать в приложениях DOS, упростив тем самым процедуры обращения к данным и ускорив выполнение программ. Позже все эти возможности будут рассмотрены более подробно. Во многих случаях объем программы оказывается невелик - меньше, а часто и много меньше, чем 64 Кбайт. Такую программу нет никакой необходимости составлять из нескольких сегментов: и команды, и данные, и стек можно разместить в единственном сегменте, настроив на его начало все 4 сегментных регистра. Для односегментных программ в MS-DOS существует специальный формат и специальные правила их составления. Программные файлы с программами, составленными по этим правилам, имеют расширение.СОМ. В формате.СОМ обычно пишутся резидентные программы и драйверы, хотя любую прикладную программу небольшого объема можно оформить в виде.СОМ-приложения. Если посмотреть список системных программ, входящих в DOS, и реализующих, в частности, внешние команды DOS, то можно заметить, что приблизительно треть этих программ написана в формате.COM (COMMAND.COM, FORMAT.COM, SYS.COM и др.), а две трети - в формате.EXE (FC.EXE: PRINT.EXE, XCOPY.EXE и т.д.). Ниже мы рассмотрим правила составления и особенности исполнения как.ЕХЕ-, так и.СОМ-программ. 39. элементарные конструкции языка ассемблера: алфавит, ключевые слова Все ассемблерные программы состоят из одного или более предложений и комментариев. Предложение и комментарий представляют собой комбинацию знаков, входящих в алфавит языка, а также чисел и идентификаторов, которые тоже формируются из знаков алфавита.
2.1. Алфавит.
Макроассемблер распознает следующий набор знаков:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ? @ _ $:. [ ] () < > { } + / * & %! ' ~ | \ = # ^;, ` " Конструкции языка ассемблера формируются из идентификаторов и ограничителей. Идентификатор представляет собой набор букв, цифр и символов _,?, $ или @, не начинающийся с цифры. Идентификатор должен полностью размещаться на одной строке и может содержать от 1 до 31 символа (точнее, используются только первые 31 символ идентификатора, остальные игнорируются). Следует заметить, что символ _, хотя и допускается в качестве компоненты идентификатора, ассемблером игнорируется. Поэтому, например, идентификаторы A_B и AB совпадают. Друг от друга идентификаторы отделяются пробелом или ограничителем, которым считается любой недопустимый в идентификаторе символ.Посредством идентификаторов представляются следующие объекты программы: 1. Переменные. 2. Метки. 3. Имена.Некоторые идентификаторы, называемые ключевыми словами, имеют фиксированный смысл и должны употребляться только в соответствии с этим. Ключевыми словами являются: 1. Директивы ассемблера. 2. Инструкции процессора. 3. Имена регистров. 4. Операторы выражений.
40)элементарные конструкции языка ассемблера: выражения и их использования Использование выражений позволяет вам получать модульный код, поскольку вы можете символически представлять в программе значения. Турбо Ассемблер выполняет все повторные вычисления, не- обходимые при изменениях (и не требует этого от вас).
В присваиваниях Турбо Ассемблер использует стандартное ин- фиксное обозначение. Выражения могут содержать операнды и унарные или бинарные операции. Унарная операция помещается перед одиноч- ным операндом; бинарные операции помещаются между двумя операнда- ми. Примеры простых операций показаны в Таблице 5.8.
Простые выражения Таблица 5.8 ---------------------T------------------------------------------ ¦ Выражение ¦ Что получается при вычислении ¦ +--------------------+------------------------------------------+ ¦ 5 ¦ константа 5 ¦ ¦ -5 ¦ константа -5 ¦ ¦ 4+3 ¦ константа 7 ¦ ¦ 4*3 ¦ константа 12 ¦ ¦ 4*3+2*1 ¦ константа 14 ¦ ¦ 4*(3+2)*1 ¦ константа 21 ¦ L--------------------+-------------------------------------------
В Приложении B содержится полная грамматика в форме Бэку- са-Наура, используемая при синтаксическом анализе выражений в режимах MASM и Ideal. Эта грамматика последовательно описывает синтаксис выражений Турбо Ассемблера, а также старшинство опера- ций.
|