русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Работа команды


Дата добавления: 2015-06-12; просмотров: 512; Нарушение авторских прав


В разделе "Работа команды" находится алгоритмическое описание команды, использующее запись, аналогичную языкам Алгол и Паскаль. Алгоритмы составлены из следующих элементов:

Комментарии заключаются в пары символов "(*" и "*)".

Составные операторы заключаются между ключевыми словами оператора "if" (IF, THEN, ELSE, FI) или оператора "do" (DO, OD), либо оператора "case" (CASE...OF,ESAC).

Имя регистра подразумевает содержимое регистра. Имя регистра в квадратных скобках подразумевает содержимое позиции памяти, адрес которой содержится в регистре. Например, ES:[DI] означает содержимое адреса памяти, задаваемого относительно регистра ES содержимым регистра DI. [SI] указывает на содержимое адреса, содержащегося в регистре SI относительно сегмента для SI по умолчанию (DS) или относительно переопределенного сегмента.

Таблица 26-5. Время выполнения переключения задачи ----------------------------------------------------------------- | Новая задача Старая задача |-------------------------------------------- |На TSS i486 | на TSS 80286 | на TSS VM-----------------------------------------------------------------VM/i486/80286 TSS | 199 | 180 | 177-----------------------------------------------------------------VM = виртуальный режим

Квадратные скобки используются также для операндов памяти, где они означают, что содержимое адреса памяти задается смещением относительно сегмента. Например, [SRC] указывает, что содержимое исходного операнда является смещением относительно сегмента. A <- B означает, что значение B присваивается А. Символы =, <>, >= и <= это операции отношения, используемые при сравнении двух величин, означающие равенство, неравенство, больше или равно или меньше или равно, соответственно. Выражение отношения, например, A = B, имеет результат TRUE (истина), если значение А равно значению В; в противном случае оно равно FALSE (ложь).



В алгоритмических описаниях используются следующие идентификаторы:

  • OperandSize представляет собой атрибут размера операнд команды, равный либо 16, либо 32 битам. AddressSize представляет собой атрибут размера адреса, также равный 16 или 32 битам. Например,
· IF instruction = CMPSW· THEN OperandSize <- 16;· ELSE· IF instruction = CMPSD· THEN OperandSize <- 32;· FI;· FI;

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

  • StackAddrSize представляет собой атрибут размера адреса для стека, связанный с данной командой, и имеет значение 16 или 32 бита, как объяснялось выше в данной главе.
  • SRC представляет собой исходный операнд. При наличии двух операндов SRC это операнд справа.
  • DEST представляет собой операнд назначения. При наличии двух операндов DEST это операнд слева.
  • LeftSRC, RightSRC позволяют различить два операнда, оба из которых являются исходными операндами.
  • eSP представляет собой либо регистр SP, либо регистром ESP, в зависимости от установки бита B для текущего сегмента стека.

Следующие функции используются в алгоритмических описаниях:

· Truncate to 16 bits (значение) уменьшает размер значения таким образом, чтобы оно помещалось в 16 битах, при необходимости отбрасывая старший байт.

· Addr(операнд) возвращает исполнительный адрес операнда (результат вычисления исполнительного адреса перед сложением с базой сегмента).

· ZeroExtend(значение) возвращает значение, расширенное нулем в соответствии с атрибутом размера операнда команды. Например, если OperandSize = 32, ZeroExtend для байтового значения, равного -10, преобразует байт из значения F6H в двойное слово с шестнадцатиричным значением 000000F6H. Если значение, переданное ZeroExtend, и атрибут размера операнда имеют одинаковое значение, то ZeroExtend возвращает это значение неизмененным.

· SignExtend(значение) возвращает значение, расширенное знаком в соответствии с атрибутом размера операнда команды. Например, если OperandSize = 32, SignExtend для байтового значения, равного -10, преобразует байт из значения F6H в двойное слово с шестнадцатиричным значением FFFFFFF6H. Если значение, переданное SignExtend, и атрибут размера операнда имеют одинаковое значение, то SignExtend возвращает это значение неизмененным.

· Push(значение) помещает значение в стек. Число байтов, помещенных в стек, определяется атрибутом размера операнда команды. Действие Push следующее:

IF StackAddrSize = 16 THEN IF OperandSize = 16 THEN SP <- SP - 2; SS:[SP] <- значение (* присвоение 2 байтов, начиная с байта, адресуемого в SP *) ELSE (* OperandSize = 32 *) SP <- SP - 4; SS:[SP] <- значение (* присвоение 4 байтов, начиная с байта, адресуемого в SP *) FI; ELSE (* StackAddrSize = 32 *) IF OperandSize = 16 THEN ESP <- ESP - 2; SS:[ESP] <- значение (* присвоение 2 байтов, начиная с байта, адресуемого в ESP *) ELSE (* OperandSize = 32 *) ESP <- ESP - 4; SS:[ESP] <- значение (* присвоение 4 байтов, начиная с байта, адресуемого в ESP *) FI; FI;

· Pop(значение) удаляет значение из вершины стека и возвращает его. Оператор EAX <- Pop(); присваивает EAX 32-битовое значение, которое Pop снимает с вершины стека. Pop возвращает либо слово, либо двойное слово, в зависимости от атрибута размера операнда. Действие Pop следующее:

IF StackAddrSize = 16 THEN IF OperandSize = 16 THEN значение возврата <- SS:[SP]; (* 2-байтовое знач *) SP <- SP + 2; ELSE (* OperandSize = 32 *) значение возврата <- SS:[SP]; (* 4-байтовое знач *) SP <- SP + 4; FI; ELSE (* StackAddrSize = 32 *) IF OperandSize = 16 THEN значение возврата <- SS:[ESP]; (* 2-байтовое знач *) ESP <- ESP + 2; ELSE (* OperandSize = 32 *) значение возврата <- SS:[ESP]; (* 4-байтовое знач *) ESP <- ESP + 4; FI; FI; RETURN(значение возврата); (* возврат слова или двойного слова *)

· Pop ST используется для страниц с командами операций с плавающей точкой и означает извлечение из стека регистров FPU.

· Bit[BitBase, BitOffset] (Бит [БазаБита, СмещениеБита]) возвращает адрес бита в строке битов, представляющей собой битовую последовательность в памяти или регистре. Биты нумеруются в регистре или памяти от младшего к старшему. В памяти два байта слова располагаются таким образом, что младший байт содержит младшие адреса битов.
Если базовым операндом является регистр, то смещение может находиться в диапазоне 0...31. Это смещение адресует бит в указанном регистре. Например, 'BIT[EAX, 21]' показана на Рисунке 26-4.

· I-O-Permission(I-O-Address, width) (Разрешение ввода-вывода (адрес-ввода-вывода,ширина)) возвращает значения TRUE или FALSE в зависимости от битового массива разрешения ввода/вывода и прочих факторов. Эта функция определяется следующим образом:

IF тип TSS равен 80286 THEN RETURN FALSE; FI; Ptr <- [TSS +66]; (* выборка указателя битового массива *) BitStringAddr <- SHR(I-O-Address, 3) + Ptr; MaskShift <- I-O-Address AND 7; CASE width OF: BYTE:nBitMask <- 1; WORD:nBitMask <- 3; DWORD:nBitMask <- 15; 31 21 0 ------------------------------------------------- | | | | ------------------------------------------------- ^ ^ |_________BITOFFSET=21___________| Рисунок 26-3. BitOffset (СмещениеБита) для BIT[EAX,21] Индексация бита (положительное смещение) 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ------------------------------------------------- | | | | | | ------------------------------------------------- | BITBASE + 1 | BITBASE | BITBASE - 1 | ^ | |_____OFFSET = -13___________| Индексация бита (отрицательное смещение) 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 ------------------------------------------------- | | | | | | ------------------------------------------------- | BITBASE | BITBASE-1 | BITBASE - 2 | | | ^ |_____OFFSET = -11____| Рисунок 26-4. Индексация битового массива ESAC; mask <- SHL (nBitMask, MaskShift); CheckString <- [BitStringAddr] AND mask; IF CheckString = 0 THEN RETURN(TRUE); ELSE RETURN(FALSE); FI;

· Switch-Tasks - это функция переключения задачи, описанная в Главе 7.



<== предыдущая лекция | следующая лекция ==>
Колонка кода операции | AAA - Преобразование к ASCII после сложения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.58 сек.