Ассемблер: основные понятия и регистры

advertisement
Семестр 2
Лекция 3
Ассемблер: основные понятия и регистры
Обобщенная архитектура машин фон Неймана
В соответствие с моделью фон Неймана ЭВМ содержит центральный процессор, как
основной
элемент,
управляющий
выполнением
всех
действий,
ОЗУ,
предназначенное для хранения программ и обрабатываемых данных, и внешних
устройств, предназначенных для связи с внешним миром и человеком-оператором.
Главным признаком архитектуры фон Неймана является последовательный
характер всех процессов, протекающих в этом устройстве, т.е. все действия
выполняются строго одно за другим. Получение следующего результата действия
возможно только после получения результата предыдущего действия.
Известны и другие архитектуры и способы построения ВМ, однако,
последовательная ВМ с архитектурой фон Неймана является основой всей
информатики во всем мире.
С другой стороны, самым распространенным процессором архитектуры фон
Неймана является процессор фирмы Intel, и все процессоры этой фирмы основаны
на архитектуре и системе команд базовой основы Intel 8086/88. Любой процессор
старшей модели включает данную систему команд как строгое подмножество, т.е.
любой процессор исполняет все команды Intel 8086/88 и содержит все регистры и
режимы адресации.
Поэтому любая программа, написанная на машинном языке I86, может быть
исполнена на любом новейшем и дорогостоящем оборудовании Intel и совместимом
с ним.
Владение машинным языком I86 означает, что вы владеете любым процессором.
Понятия команды и набора команд последовательной ВМ
Команда (instruction) - это закодированное описание операции, которую должна выполнить
ЭВМ. Это число.
Команда логически подразделяется на несколько частей, называемых полями команды
(fields). К числу полей команды относятся поле кода операции (КОП) и поля операндов (ОП).
Код операции содержит действие, выполняемое над операндами.
Операнд - поле, содержащее указание для нахождения данного или размещения результата
или поле, содержащее само данное.
Способ нахождения данного в памяти называется режимом адресации.
Набором, или системой команд, называется полная совокупность операций, которые
может выполнить данная ЭВМ.
В зависимости от наибольшего возможного количества операндов в команде наборы
команд делятся на безоперандные, одно-, двух- и трехоперандные.
Отличие машинного языка от языка высокого уровня (ЯВУ)
Машинный язык - это способ представления алгоритма в виде последовательности
машинных команд, которые обрабатывают данные, представленные в виде ячеек
памяти.
В отличие от программ на ЯВУ такой способ представления обеспечивает
наивысшую из достижимых скорость обработки данных в оперативной памяти.
Представление алгоритма на ЯВУ дает свободу программисту, но это затрачивает
больше памяти и ресурсов.
Понятие Ассемблера
Два смысла слова Ассемблер:
1) Обозначение компилятора
2) Входной язык компилятора
Ассемблер (как входной язык) - это система обозначений, используемая для
представления в удобочитаемой форме программ, написанных на машинном языке.
Основные группы команд современной последовательной ВМ
Каждый процессор конкретного типа и производителя содержит группы команд,
которые являются стандартом.
К числу этих стандартных групп команд относятся:
1) команды пересылки;
2) арифметические;
3) логические;
4) команды сдвига;
5) команды ветвления и цикла;
6) команды ввода и вывода;
7) команды работы с подпрограммами;
8) команды операции со стеком;
9) специальные (преобразование формата, длины, программные прерывания,
установка флагов и другие).
Состав и назначение регистров процессора Intel 8086/88
В I8086/88 16-разрядная шина адресации и 8-разрядная шина данных.
Регистром ЦП называется внутренняя ячейка оперативной памяти, которая не
имеет адреса, подобно ячейке ОЗУ, однако к ней можно обратиться, если ее код
указать в качестве операнда команды.
В Ассемблере каждый из регистров имеет мнемоническое обозначение.
Все регистры ЦП объединены в группы.
Всего в I8086/88 5 групп регистров:
1) Общего назначения
2) Указателей и индексов
3) Сегментные
4) Счетчик команд
5) Слово состояния процессора
Регистры общего назначения (General Purpose Registers)
РОН, GPR
15
07
0
AX
AHigh
ALow
BX
BH
BL
CX
CH
CL
DX
DH
DL
Accumulator dupleX (аккумулятор)
Base dupleX (базовый)
Counter dupleX (регистр-счетчик)
Data dupleX (регистр данных)
Данные регистры могут быть использованы только в качетве операндов команд и
не применимы при адресации памяти.
Указатели и индексы (Index & Pointers)
15
0
SP
BP
SI
DI
Stack pointer (указатель стека)
Base pointer (указатель базы)
Source index (индекс источника)
Destination index (индекс приемника)
Регистры указателей и индексов используются в адресных выражениях при
обращении к памяти, а также могут быть использованы в качестве элементов
данных.
Сегментные регистры (Segment registers)
Без изменения присутствуют во всех старших моделях процессоров.
15
0
CS
DS
SS
ES
Code segment register (регистр сегмента команд)
Data segment register (регистр сегмента данных)
Stack segment register (регистр сегмента стека)
Extra segment register (регистр дополнительного сегмента)
Сегментные регистры предназначены для хранения базовых адресов сегментов, а
также являются частью указателя при обращении к памяти.
Счетчик команд (Instruction pointer)
СК, IP
15
0
IP
СК - регистр центрального процессора, который содержит смещение текущей
исполняемой команды. Это смещение отсчитывается от начала сегмента кода.
Программист может получить доступ к СК только косвенно, используя команды
передачи управления, косвенные или безусловные. Никаким другим образом
невозможно!
Слово состояния процессора (ССП)
15
0
Flags
ССП содержит в виде признаков обобщенный результат последней выполненной
команды и его содержимое используется для построения условных передач
управления и вызовов, обычно прерываний.
ССП не имеет ни идентификатора, гт кода, а доступ к нему осуществляется с
помощью использования безоперандных команд, т.е. команд с неявным режимом
адресации.
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
Каждый из используемых разрядов имеет символьное представление.
Разряды ССП - флаги.
Младший нулевой разряд называется Carry flag (флаг переноса). Устанавливается
в 1, если при выполнении команды произошел перенос из старшего разряда или
заем в старший разряд.
Parity flag (влаг четности) устанавливается в 1, если количество единиц в младшем
байте результата четно.
Auxiliary flag (флаг вспомогательного переноса) устанавливается в 1, если произошел
перенос или заем между 3 и 4 разрядами результата. Фиксирует межтетрадный заем
или перенос.
Zero flag (флаг нуля) устанавливается в 1, если все разряды результата последней
операции нулевые.
Sign flag (флаг знака) устанавливается в 1, если знак результата последней
выполненной команды отрицателен, т.е. в старшем разряде результата записана 1.
«-» в машинной арифметике кодируется как 1, «+» - как 0.
Tracing flag (флаг трассировки) - это управляющий разряд, не является признаком.
Если установлен в 1, то завершение выполнения каждой очередной команды
вызывает прерывание, которое называется прерыванием отладчика, и
предназначено для пошагового (покомандного) выполнения программы
(отлаживание процесса).
Interrupt flag (флаг разрешения прерывания) - это управляющий разряд.
Direction flag (флаг направления) - это управляющий разряд, от его состояния
зависит выполнение цепочечных команд.
Overflow flag (флаг переполнения) - флаг признака. Устанавливается в 1, если в
результате последней выполненной команды произошло знаковое целочисленное
переполнение.
Download