Sibprompost.ru

Стройка и ремонт
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Turbo Assembler

Turbo Assembler

Регистры процессора

  1. Введение
  2. Выполнение
  3. Регистры
  4. Сегменты
  5. Отладчик

Регистры процессора

Строго говоря, приведенное ниже описание относится только к процессорам 8086 и 80286, для которых были характерны 16-разрядные регистры. В современных процессорах типа Pentium почти все регистры 32-разрядные, что существенно увеличивает возможности компьютера. Однако младшие половины регистров этих процессоров совпадают и по названиям и по назначению с 16-разрядными регистрами процессора 8086. Поэтому программы, написанные для выполнения под управлением MS-DOS, т. е. для 16-разрядного процессора, прекрасно работают и с 32-разрядным, хотя и не используют все его возможности. Поначалу будет рассмотрена 16-разрядная архитектура процессора 8086 или, точнее, та часть современных процессоров, которая предназначена для использования в программах для системы MS-DOS. Этот гипотетический процессор будет называться МП 86.

МП 86 содержит двенадцать 16-разрядных программно-адресуемых регистров, которые принято объединять в три группы: регистры данных, регистры-указатели и сегментные регистры. Кроме того, в состав процессора входят счетчик команд и регистр флагов. Регистры данных и регистры-указатели часто называют регистрами общего назначения.

В группу регистров данных включаются регистры АХ, ВХ, СХ и DX. Программист может использовать их по своему усмотрению для временного хранения любых объектов (данных или адресов) и выполнения над ними требуемых операций. При этом регистры допускают независимое обращение к старшим (АН, ВН, СН и DH) и младшим (AL, BL, CL и DL) половинам. Так, команда

пересылает старший байт регистра АХ в младший байт регистра ВХ, не затрагивая при этом вторых байтов этих регистров. Еще раз отметим, что сначала указывается операнд-приемник, а после запятой — операнд-источник, т. е. команда выполняется как бы справа налево. В качестве средства временного хранения данных все регистры общего назначения (да и все остальные, кроме сегментных и указателя стека) вполне эквивалентны, однако многие команды требуют для своего выполнения использования вполне определенных регистров. Например, команда умножения mul требует, чтобы один из сомножителей был в регистре АХ (или AL), а команда организации цикла loop выполняет циклический переход СХ раз.

Индексные регистры SI и DI так же, как и регистры данных, могут использоваться произвольным образом. Однако их основное назначение — хранить индексы (смещения) относительно некоторой базы (т. е. начала массива) при выборке операндов из памяти. Адрес базы при этом обычно находится в одном из базовых регистров (ВХ или ВР). Примеры такого рода будут приведены ниже.

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

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

Регистры SI, DI, ВР и SP, в отличие от регистров данных, не допускают побайтовую адресацию.

Четыре сегментных регистра CS, DS, ES и SS хранят начальные адреса сегментов программы и, тем самым, обеспечивают возможность обращения к этим сегментам.

Регистр CS обеспечивает адресацию к сегменту, в котором находятся программные коды, регистры DS и ES — к сегментам с данными (таким образом, в любой точке программа может иметь доступ к двум сегментам данных, основному и дополнительному), а регистр SS — к сегменту стека. Сегментные регистры, естественно, не могут выступать в качестве регистров общего назначения.

Читайте так же:
Panasonic kx mb1500 сбросить счетчик картриджа

Указатель команд IP (Instruction Pointer) «следит» за ходом выполнения программы, указывая в каждый момент относительный адрес команды, следующей за исполняемой. Регистр IP программно недоступен ; наращивание адреса в нем выполняет микропроцессор, учитывая при этом длину текущей команды.

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

Флаг переноса CF (Carry Flag) индицирует перенос или заем при выполнении арифметических операций, а также (что для прикладного программиста гораздо важнее!) служит индикатором ошибки при обращении к системным функциям.

Флаг паритета PF (Parity Flag) устанавливается в 1, если младшие 8 бит результата операции содержат четное число двоичных единиц.

Флаг вспомогательного переноса AF (Auxiliary Flag) используется в операциях над упакованными двоично-десятичными числами. Он индицирует перенос в старшую тетраду (четверку битов) или заем из старшей тетрады.

Флаг нуля ZF (Zero Flag) устанавливается в 1, если результат операции равен нулю.

Флаг знака SF (Sign Flag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате.

Флаг переполнения OF (Overflow Flag) фиксирует переполнение, т. е. выход результата операции за пределы допустимого для данного процессора диапазона значений.

Флаги состояния автоматически устанавливаются процессором после выполнения каждой команды. Так, если в регистре АХ содержится число 1, то после выполнения команды декремента (уменьшения на единицу)

содержимое АХ станет равно нулю и процессор сразу отметит этот факт, установив в регистре флагов бит ZF (флаг нуля).

Если попытаться сложить два больших числа, например 58 000 и 61 000, то установится флаг переноса CF, так как число 119 000, получающееся в результате сложения, должно занять больше двоичных разрядов, чем помещается в регистрах или ячейках памяти, и возникает «перенос» старшего бита этого числа в бит CF регистра флагов.

Индицирующие флаги процессора дают возможность проанализировать, если это нужно, результат последней операции и осуществить «разветвление» программы: например, в случае нулевого результата перейти на выполнение одного фрагмента программы, а в случае ненулевого — на выполнение другого. Такие разветвления осуществляются с помощью команд условных переходов, которые в процессе своего выполнения анализируют состояние регистра флагов. Так, команда

осуществляет переход на метку zero, если результат выполнения предыдущей команды окажется равен нулю (т. е. флаг ZF установлен), а команда

выполнит переход на метку okey, если предыдущая команда сбросила флаг переноса CF (или оставила его в сброшенном состоянии).

Управляющий флаг трассировки TF (Trace Flag) используется в отладчиках для осуществления пошагового выполнения программы. Если TF=l, то после выполнения каждой команды процессор реализует процедуру прерывания 1 (через вектор прерывания с номером 1).

Управляющий флаг разрешения прерываний IF (Interrupt Flag) разрешает (если равен единице) или запрещает (если равен нулю) процессору реагировать на прерывания от внешних устройств.

Управляющий флаг направления DF (Direction Flag) используется особой группой команд, предназначенных для обработки строк. Если DF=0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF=1, обработка строки идет в обратном направлении.

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

Читайте так же:
Зачем нужны счетчики с импульсным выходом

Счетчик команд регистр флагов

Регистр флагов Аккумулятор (признаков)

Нулевой разряд, называемый флагом С (флагом переноса), принимает значение «1», если при вычислении был перенос из старшего разряда (например, в операции сложения), и значение «О», если переноса не было. Шестой разряд (7-й по порядку), называемый флагом Z (флагом нуля), принимает значение «1», если 8-разрядный результат операции, находящийся в регистре А, равен 0, и принимает значение «О», если этот результат отличен от 0. Помимо этих флагов, в регистре есть флаг N, который указывает, какая операция — сложение или вычитание — была выполнена, и флаг S, указывающий знак результата.

Содержимое регистра признаков сохраняется до следующей операции сложения, вычитания или сравнения. Есть команды, которые не изменяют содержимое регистра F, равно как и такие, результат действия которых зависит от содержимого регистра F. Поэтому мы каждый раз должны учитывать возможность изменения содержимого регистра F в результате выполнения той или иной команды.

Регистры общего назначения — «записная книжка» процессора

К регистрам общего назначения относятся регистры В, С, D, Е, Н, L (все 8-разрядные). Их основная функция — служить «записной книжкой» ЦПУ для временного хранения промежуточных результатов операций. Поскольку эти регистры находятся в самом процессоре, считывание и запись их содержимого осуществляется быстрее, чем при обращении к ЗУ. Каждая пара регистров ВиС, БиЕ, НиЬ образует 16-разрядный регистр. Шестнадцатиразрядные регистры могут, например, потребоваться для временного хранения адресов. Кроме того, ЦПУ Z80 производит операции с 16-разрядными числами. В этом случае пара регистров H-L выполняет функцию аккумулятора.

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

Регистр С обычно применяется в качестве указателя адреса порта при выполнении команды ввода-вывода.

6.1. Назначение регистров ЦПУ

Пара регистров H-L часто используется для указания косвенного адреса, то есть содержит 16-разрядный адрес. Например, команда сложения «ADD A, (HL)» означает, что содержимое ячейки памяти с адресом, указанным в сдвоенном регистре H-L прибавляется к

содержимому регистра А.

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

Дополнительные регистры — «дублеры» главных регистров В ЦПУ Z80 имеется еще одна группа регистров, аналогичных регистрам A, F, В, С, D, Е, Н и L. Их называют дополнительными регистрами и обозначают с помощью символа «». При этом имеется в виду, что нельзя одновременно использовать и главные регистры (A. L), и дополнительные (А. ) так же, как нельзя одновременно выпустить на сцену актера и его дублера.

Дополнительные регастры — регистры «дублеры»

За кулисами • Дублер

Содержимое регистров взаимно заменяется посредством команды обмена

В процессе выполнения программы, когда W™™*ZZZ?t на программу обработки прерывания или на подпрограмму,бывают слуТинеобходимо на время «спрятать» содержимо равных растров в дополнительные регистры. Для этого предусмотрены

команды обмена, с помощью которых происходит взаимный обмен содержимого главных и дополнительных регистров. Например, по команде «ЕХ AF, AF » содержимое пары регистров A-F меняется на содержимое соответствующих дополнительных регистров A-F. Команда «ЕХХ» одновременно производит взаимную замену данных, содержащихся в регистрах общего назначения В, С, D, Е, Н и L, на данные, хранящиеся в соответствующих дополнительных регистрах. Все остальные команды обмена, кроме двух указанных, работают только с основными регистрами.

Читайте так же:
Дистанционное устройство остановки счетчика

Регистры — указатели адреса IX и IY

16-разрядные регистры IX и ГУ называются индексными регистрами. Они выполняют одну и ту же функцию и применяются при косвенной адресации для хранения адреса памяти. Например, если в памяти хранится таблица данных, то в индексный регистр заносится адрес «вершины таблицы», а адреса остальных данных указываются относительно вершины таблицы. Например, команда «ADD А, (1Х+3)» означает, что к содержимому регистра А прибавляется содержимое ячейки памяти с адресом, равным сумме: адрес регистра IX + 3.

Счетчик команд (PC) и указатель стека (SP)

Счетчик команд (PC) и указатель стека (SP) — это 16-разрядные регистры, каждый из которых выполняет только одну-единствен-ную функцию. Из предыдущей главы мы знаем, что счетчик команд — это регистр, указывающий в памяти адрес очередной команды, выполняемой ЦПУ.

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

Когда в процессе выполнения программы происходит переход на подпрограмму или на программу обработки прерывания, то после выполнения этих программ необходимо вернуться в исходную программу. Следовательно, при выходе из исходной программы мы должны занести в память адрес возврата в программу. Адрес ячейки памяти, куда заносится адрес возврата, помещается в 16-разрядный

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

Итак, мы узнали наименования и познакомились с назначением регистров ЦПУ Z80. Следующий раздел посвятим рассмотрению основных команд.

Перенос данных, находящихся в па-

КОМАНДА ЗАГРУЗКИ ИЛИ РСГИСТре ЦР* ВР»

ЛАННЫХН.ОАтгистр или другую ячейку памяти назы-

вается загрузкой данных. Команда загрузки (Load) является одной из основных команд и применяется чаще других. Она имеет вид, представленный на Рис. 6.4.

I 1-Источник 0перавды

Сокращение слова Load (загрузить). Мнемокод

Источник Ь: регистр, константа, (регистр), (константа) Приемника: регистр, (регистр), (константа)

Рис. 6.4. Структура команды загрузки (LD)

Операнды а и о обозначают соответственно источник данных (место, откуда считываются данные) и приемник (место, куда записываются данные). Источник и приемник представляют собой регистр или константу, либо регистр или константу, заключенные в скобки. В последнем случае константа или содержимое регистра являются адресом. Например, (01 ООН) означает содержимое памяти по адресу 0100Н; (HL) — содержимое ячейки памяти, значение адреса

Указатель команд и регистр флагов

IP – указатель команд, выполняет роль счетчика команд; его содержимое – это смещение относительно начального адреса сегмента команд (CS).

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

Flags (PSW) – регистр флагов, содержит информацию о текущем состоянии МП. Рассмотрим структуру регистра флагов подробнее (см. рис.3).

FlagsOFDFIFTFSFZFAFPFCF

Флаги разделяют на:

— условные (флаги условий), отражающие результаты выполнения предыдущей команды в АЛУ и используемые в командах условных переходов;

— управляющие (флаги управления), от которых зависит выполнение специальных функций МП.

Читайте так же:
Счетчик принтера canon mf4410

Условные флаги перечислим в алфавитном порядке.

AF (Auxiliary Carry flag) – флаг вспомогательного переноса, предназначенный для обработки чисел в BCD-формате, используется при выполнении арифметических операций над числами длиной 1 байт для индикации переноса из младшей тетрады в старшую (или займа из старшей тетрады). Здесь BCD (Binary Coded Decimal) – двоично-десятичное представление чисел.

CF (Carry flag) – флаг переноса, предназначен для индикации переноса из старшего байта, используется в операндах, разрядность которых больше 16 бит.

OF (Overflow flag) – флаг переполнения, предназначен для индикации переполнения результатов при выполнении арифметических операций. При сложении он устанавливается в 1, если есть перенос в старший бит, но нет переноса из старшего бита.

PF (Parity flag) – флаг четности, используется как контрольный бит, устанавливается в 1, если младший байт содержит четное число единиц.

SF (Sign flag) – флаг знака, равен 1 для отрицательного результата.

ZF (Zero flag) – признак нулевого результата.

Управляющие флаги устанавливаются программным путем и используются для изменения состояния МП.

DF (Direction flag) – флаг направления, применяется в командах обработки строк. При DF=1 обработка осуществляется от наибольшего адреса к меньшему, а при DF=0 – от начала к концу.

Установка флага осуществляется следующими командами ассемблера

КомандаУстанавливает значение DF
STD
CLD

IF (Interrupt-Enable flag) – разрешение прерывания, используется для разрешения или запрета обработки внешнего маскируемого прерывания. Устанавливается командами ассемблера

КомандаЗначение IFРезультат установки
STIОбработка прерывания разрешена
CLIОбработка прерывания запрещена

TF (Trap flag) – трассировка, используется для осуществления покомандного (пошагового) выполнения программы. При TF=1 МП автоматически вырабатывает внутренние прерывания после каждой команды, что удобно для отладочного режима выполнения программы. Изменение состояния флага TF не выполняется одной командой, а требует последовательности специальных команд, которые будут рассмотрены ниже.

1.Регистровая архитектура процессоров Intel. Регистры: названия, разрядности и состав регистров. Основные применения. Флаги процессора Intel. Команды работы с флагами.

Для того, чтобы писать программы на ассемблере, нам необходимо знать, какие регистры процессора существуют и как их можно использовать. Все процессоры архитектуры x86 (даже многоядерные, большие и сложные) являются дальними потомками древнего Intel 8086 и совместимы с его архитектурой. Это значит, что программы на ассемблере 8086 будут работать и на всех современных процессорах x86.

Все внутренние регистры процессора Intel 8086 являются 16-битными:

Всего процессор содержит 12 программно-доступных регистров, а также регистр флагов (FLAGS) и указатель команд (IP).

Регистры общего назначения (РОН) AX, BX, CX и DX используются для хранения данных и выполнения различных арифметических и логических операций. Кроме того, каждый из этих регистров поделён на 2 части по 8-бит, с которыми можно работать как с 8-битными регистрами (AH, AL, BH, BL, CH, CL, DH, DL). Младшие части регистров имеют в названии букву L (от слова Low), а старшие H (от слова High). Некоторые команды неявно используют определённый регистр, например, CX может выполнять роль счетчика цикла.

Индексные регистры предназначены для хранения индексов при работе с массивами. SI (Source Index) содержит индекс источника, а DI (Destination Index) — индекс приёмника, хотя их можно использовать и как регистры общего назначения.

Регистры-указатели BP и SP используются для работы со стеком. BP (Base Pointer) позволяет работать с переменными в стеке. Его также можно использовать в других целях. SP (Stack Pointer) указывает на вершину стека. Он используется командами, которые работают со стеком.

Читайте так же:
После грозы не работает счетчик

Сегментные регистры CS (Code Segment), DS (Data Segment), SS (Stack Segment) и ES (Enhanced Segment) предназначены для обеспечения сегментной адресации. Код находится в сегменте кода, данные — в сегменте данных, стек — в сегменте стека и есть еще дополнительный сегмент данных. Реальный физический адрес получется путём сдвига содержимого сегментного регистра на 4 бита влево и прибавления к нему смещения (относительного адреса внутри сегмента).

Указатель команд IP (Instruction Pointer) содержит адрес команды (в сегменте кода). Напрямую изменять его содержимое нельзя, но процессор делает это сам. При выполнении обычных команд значение IP увеличивается на размер выполненной команды. Существуют также команды передачи управления, которые изменяют значение IP для осуществления переходов внутри программы.

Регистр флагов FLAGS содержит отдельные биты: флаги управления и признаки результата. Флаги управления меняют режим работы процессора:

  • D (Direction) — флаг направления. Управляет направлением обработки строк данных: DF=0 — от младших адресов к старшим, DF=1 — от старших адресов к младшим (для специальных строковых команд).
  • I (Interrupt) — флаг прерывания. Если значение этого бита равно 1, то прерывания разрешены, иначе — запрещены.
  • T (Trap) — флаг трассировки. Используется отладчиком для выполнения программы по шагам.

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

  • S (Sign) — знак результата, равен знаковому биту результата операции. Если равен 1, то результат — отрицательный.
  • Z (Zero) — флаг нулевого результата. ZF=1, если результат равен нулю.
  • P (Parity) — признак чётности результата.
  • C (Carry) — флаг переноса. CF=1, если при сложении/вычитании возникает перенос/заём из старшего разряда. При сдвигах хранит значение выдвигаемого бита.
  • A (Auxiliary) — флаг дополнительного переноса. Используется в операциях с упакованными двоично-десятичными числами.
  • O (Overflow) — флаг переполнения. CF=1, если получен результат за пределами допустимого диапазона значений.

Регистр флагов можно сохранить в стек с помощью команды PUSHF и восстановить из стека с помощью команды POPF. Кроме того, в процессоре существуют специальные команды, которые позволяют явно установить или сбросить флаги CF, DF и IF. Это очень простые команды: у них нет операндов и результатом является только изменение значения соответствующего флага.

Флаг переноса CF

  • Команда CLC сбрасывает флаг CF.
  • Команда STC устанавливает флаг CF в единицу.
  • Команда CMC инвертирует значение флага CF.

Флаг направления DF

Этот флаг определяет направление обработки данных цепочечными командами. Он должен устанавливаться или сбрасываться перед использованием этих команд.

  • Команда CLD сбрасывает флаг DF.
  • Команда STD устанавливает флаг DF в единицу.

Флаг прерывания IF

Этот флаг определяет, разрешены в данный момент прерывания или нет

  • Команда CLI сбрасывает флаг IF (запрещает прерывания).
  • Команда STI устанавливает флаг IF в единицу (разрешает прерывания).

Команды LAHF и SAHF

Команда LAHF загружает младший байт регистра флагов в AH. Её удобно использовать, когда нужно получить значения сразу нескольких флагов. Порядок расположения флагов представлен на рисунке:

Команда SAHF выполняет обратную операцию — загружает содержимое AH в младший байт регистра флагов. Это позволяет одновременно изменить значения нескольких флагов. При этом биты 1, 3, 5 регистра AH игнорируются.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector