Анимация
JavaScript


Главная  Библионтека 

[ 0 ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

защита информации

Исполнительный 20-разрядный адрес любой ячейки памяти вычисляется ЦП путем ожения начального адреса области памяти (сегмента памяти), в которой находится эта йка, со смещением (offset) в ней (в байтах) от начала сегмента. Размер сегмента мо-т Находиться в пределах О байт - 64 Кбайт. Начальный адрес сегмента памяти обычно называют сегментным адресом, смещение в сегменте памяти - относительным адре сом. Сегментный адрес без 4 младших нулевых битов, т.е. деленный на 16, храните; в одном из сегментных регистров. При вычислении исполнительного адреса ЦП умножа ет содержимое сегментного адреса на 16 и прибавляет к полученному 20-разрядном коду 16-разрядное содержимое регистра, в котором хранится относительный адрес Таким образом, полный адрес ячейки памяти может быть записан в виде SSSSh; OOOOh где SSSSh - сегментный, а OOOOh - относительный адрес ячейки в шестнадцатерично! форме записи. Сегменты жестко не привязываются к определенным адресам памят] и могут частично или полностью перекрываться. Участок памяти размером 16 байт называется параграфом. Адрес начала сегмента всегда выровнен на границу параграфа. Например, 20-разрядный шестнадцатеричный адрес 01510h может быть представлен в виде двух 16-разрядных слов следующим образом; 0150h; OOlOh, OlOOh; 0510h и т. п.

Если рассматривать только режим реальной адресации памяти, или просто реальный режим, внутренняя архитектура МП фирмы Intel практически совпадает. Рассмотрим структуру МП семейства Intel на примере процессора 8086.

Процессор 8086 содержит двенадцать программно-доступных 16-разрядных регистров, а также указатель команд и регистр флагов (признаков).

Сегментные регистры CS (code segment), DS (data segment), ES (enhanced segment) и SS (stack segment) обеспечивают адресацию четырех сегментов (соответственно сегмента кода, сегментов данных, основного и дополнительного, а также сегмента стека).

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

Основное назначение регистров SI (Source Index) и DI (Destination Index) хранить индексы (смещения) относительно некоторых базовых адресов массивов при выборке операндов из памяти. Адрес базы при этом может находиться в регистре BP или ВХ. Специальные строковые команды не явным образом используют регистры SI и DI в качестве указателей в обрабатываемых строках. При необходимости оба индексных регистра могут использоваться в качестве РОН.

Глава

1 Основы программирования на Ассемблере IBM PC 11

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

Стек - это область памяти, организованная таким образом, что 16-разрядные данные загружаются в нее последовательно, а при считывании извлекаются в обратном порядке. Стек заполняется снизу вверх, а извлечение содержимого стека производится сверху (с вершины стека) в порядке очередности. В результате стек можно назвать F/LO-памятью, работающей по принципу "первым вошел, последним вышел" - "first in, last out". Для обычно организованной памяти (памяти с произвольным доступом) при вводе и выводе данных необходимо указывать адреса ячеек, к которым происходит обращение. Для стека достаточно простых команд "поместить в стек" и "извлечь из стека". Стек используется для временного хранения данных, для передачи параметров вызываемым подпрограммам, для сохранения адресов возврата при вызове подпрограмм и обработчиков прерываний.

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

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

Признаки результата;

S (Sign) - знак результата, равен старшему биту результата операции;

Z (Zero) - признак нулевого результата;

Р (Parity) - признак четности результата;

С (Сапу) - флаг переноса; устанавливается, если при сложении (вычитании) возникает перенос (заем) из старшего разряда результата; при сдвигах CF хранит значение выдвигаемого бита; служит индикатором ошибки при обращении к системным функциям;

А (Auxiliary) - флаг дополнительного переноса; устанавливается, если возникает перенос (заем) из третьего бита в четвертый; используется в операциях над упакован-

нь1ми двоично-десятичными цифрами;

(Overflow) - флаг переполнения; устанавливается при получении результата, нахо-Щегося за пределами допустимого диапазона значений. Флаги управления:

j*"tion) - флаг направления; определяет направление обработки строк данных; ~ О - движение от младших адресов к старшим, содержимое индексных регистров ле обработки каждого элемента строки увеличивается; DF = 1 - движение




Рис. 1.1.4. Последовательность выполнения команд

Программа всегда располагается в сегменте, определяемом регистром CS. Значение CS определяется операционной системой автоматически. Область данных по умолчаний находится в сегменте, определяемом регистром DS. Она может находиться и в одном сегментов, адресуемых регистрами CS, ES или SS, однако этот факт должен быть отражен в профамме наличием префикса замены сегмента, например: CS; FlagEnable - содержимое ячейки памяти FlagEnable, находящейся в сегменте кода, ES: [ВХ - 2] - содержимое ячейки памяти, расположенной в дополнительном сегмент данных, при этом ее относительный адрес равен содержимому ВХ, уменьшенному на

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

0 или 1

0 или 1

0,1 или 2

0,1 или 2

Префикс

Постбайт

Адрес (смещение)

Данные

повторение команды, замена -сегмента, выполнение определенного условия

режим адресации,-используемые регистры, расширение КОП

Рис. 1.1.5. Общий формат команды

Режимы адресации данных. Различают следующие режимы адресации данных:

непосредственный - данное длиной 8 или 16 бит является частью команды;

прямой - 16-разрядный исполнительный адрес данного является частью команды;

Ш регистровый - 8- или 16-разрядиое данное находится в определяемом командой соответственно 8-разрядном или 16-разрядном регистре;

регистровый косвенный - исполнительный (эффективный) адрес ЕА находится в одном из регистров ВХ, SI, DI

(ВХ)]

EA = J (SI)

(DI)

регистровый относительный - исполнительный адрес равен сумме содержимого одного из регистров BP, ВХ, S1, DI и 8- или 16-разрядного смещения

(ВР)~

(ВХ)

(SI)

(DI)

• баз

8 - разрядное смещение 16 - разрядное смещение

iTrH"""" ~ чсполнительный адрес равен сумме содержимого одного из базо-стров BP, ВХ и одного из индексных регистров S1, DI

(BP) 1(ВХ)

(SI) l(DI)

1,1.3. Система команд

Формат команды. Код команды разделяется на фуппы бит или поля, причем единственное обязательное поле - поле кода операции (КОП) определяет, что должен делать процессор, а остальные поля идентифицируют требуемую команде информацию.

Длина в байтах.

от старших адресов к младшим, содержимое индексных регистров после обработки каждого элемента строки уменьшается;

а 1 (Interrupt) - флаг прерывания; устанавливается, когда надо разрешить ЦП обрабатывать запросы прерываний от УВВ;

ш Т (Trap) - флаг трассировки; при TF = 1 после выполнения каждой команды генерируется внутреннее прерывание процессора; используется отладчиками.



относительный базовый индексный ~ исполнительный адрес равен сумме содержимого одного из базовых регистров BP, ВХ, одного из индексных регистров SI, DI и 8-или 16-разрядного смещения

(ВР)1

(SI)

(ВХ)

(DI)

8 - разрядное смещение l 6 - разрядное смещение

Режимы адресации переходов. Различают следующие режимы адресации переходов: внутрисегментный прямой - исполнительный адрес перехода равен сумме текущего содержимого указателя команд IP и 8- или 16-разрядного смещения; допустим в командах условного и безусловного переходов, но в первом случае может использоваться только 8-разрядное смещение; И внутрисегментный косвенный - исполнительный адрес перехода суть содержимое регистра или ячейки памяти, которые указываются в любом режиме (кроме непосредственного) адресации данных; содержимое IP заменяется исполнительным адресом перехода; допустим только в командах безусловного перехода;

межсегментный прямой - заменяет содержимое IP одной частью, а содержимое CS другой частью команды;

межсегментный косвенный - заменяет содержимое IP и CS содержимым двух смежных 16-разрядных ячеек памяти, которые определяются в любом режиме адресации данных, кроме непосредственного и регистрового.

Межсегментный переход может быть только безусловным. Пустая команда NOP (No operation)

По команде NOP процессор не выполняет никаких операций, происходит лишь инкремент указателя команд - регистра IP.

Команды передачи данных - MOV, LAHF, LDS, LEA, LES, SAHF, XCHG, XLAT

MOV 1-Q операнд, 2-й операнд

Пересылка данных (Move)

Команда замещает первый операнд (приемник) вторым (источником). Исходное значение приемника теряется. В качестве источника могут использоваться непосредственный операнд (число), регистр или операнд, находящийся в памяти (переменная). В качестве приемника - регистр (кроме CS) или ячейка памяти. Оба операнда должны иметь одинаковую разрядность. Нельзя выполнять пересылку из ячейки памяти в ячейку памя ти, а также зафузку сегментного регистра непосредственным значением.

XCHG 1-й операнд, 2-0 операнд............................................................

......................................................Обмен данными между операндами (Exchange)

v манпа меняет местами содержимое двух операндов. В качестве операндов можно ,вать регистр (кроме сегментного) или ячейку памяти, при этом не допускается оба операнда одновременно определять как ячейки памяти.

XLAT

Табличная трансляция

Команда заменяет содержимое AL байтом из таблицы (максимальный размер таблицы - 25( байтов), начальный адрес которой равен DS: ВХ. Содержимое AL рассматривается как смеще ние в таблице, из соответствующей ячейки таблииь! извлекается байт и помещается в AL.

LEA 1-й операнд, 2-й операнд

Загрузка относительного адреса (Load ЕА

Команда загружает в регистр (кроме сегментного), указанный в качестве первог операнда, относительный адрес ячейки памяти, указанной в качестве второго операнда.

Примеры

MSize Mem

Данные == DB

EQU DW DB

Var = 2

Команды mov xchg

26, 77, (22 - 5)/2, 19, 0

; Массив байтов 5 - Mas ; Размер массива Mas, MSize = 5

3502h ; 16-раэрядная ячейка памяти

10 DUP (?) ; Буфер объемом 10 байт,

; содержимое буфера не определено

; Var = 2

mov mov

ах, MasSize ах, Mem

di, OFFSET Buf [di], al

di, 3

bx, di dl, Mas[bx


; AX = 5 AX и ячейка Mem обмениваются

; содержимым, Mem = 5, AX = 3502h Запись в SI относительного ; адреса буфера Buf ; Пересылка байта из AL

; в 8-разрядную ячейку памяти ; с адресом DS; DI, Buf[0] = 2 ; Запись в DI десятичного числа ; DI = 3

; Пересылка слова из DI в ВХ, ВХ = ] ; Пересылка в DL элемента массива

Mas, индекс которого находится в ; ВХ, DL = 19 ; Запись в ВХ относительного ; адреса массива Mas + di] ; Запись в АН содержимого ячейки



[ 0 ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88