Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Регистры общего назначенияВосемь регистров общего назначения (или общих регистров) процессора 8086 (каждый размером 16 бит) используются в операциях большинства инструкций в качестве источника или приемника при перемещении данных и вычислениях, указателей на ячейки памяти и счетчиков. Каждый регистр общего назначения может использоваться для хранения 16-битового значения, в арифметических и логических операциях, может выполняться обмен между регистром и памятью (запись из регистра в память и наоборот). Например, в данном фрагменте программы: mov ах, 5 mov dx,9 add ax,dx значение 5 загружается в регистр АХ. значение 9 - в DX. и эти два значения складываются вместе. При этом результат (14) сохраняется в регистре АХ. Вместо регистров АХ и DX здесь можно использовать регистр CX. SI или любой другой регистр общего назначения. Кроме такого общего свойства регистров, как использования их для хранения значений или в качестве источника и приемника при работе в инструкциях с данными, каждый регистр общего назначения имеет свою особенность. Регистр АХ называют также накопителем (аккумулятором). Этот регистр всегда используется в операциях умножения или деления и является также одним из тех регистров, который можно использовать для наиболее эффективных операций (арифметических, логических или операций перемещения данных). Младшие 8 бит регистра АХ называются также регистром AL. а старшие 8 бит - регистром АН. Это может оказаться удобным при работе с данными размером в байт. Таким образом, регистр АХ можно использовать, как два отдельных регистра. В следующем фрагменте программы регистр АН устанавливается в значение 0. это значение копируется в AL и затем в регистр AL добавляется 1: mov ah.O В результате в регистре АХ будет записано значение 1. Регистры BX, CX и DX могут аналогичным образом использоваться либо как один 16 разрядный регистр, либо как два 8-разрядных. Регистр ВХ может использоваться для ссылки на ячейку памяти (указатель). Если говорить кратко, то 16-битовое значение, записанное в ВХ. может использоваться в качестве части адреса ячейки памяти, к которой производится доступ. Например, следующий код загружает в AL содержимое адреса памяти 9: mov ax,0 Как можно заметить, перед обращением к ячейке памяти, на которую указывает ВХ. мы загрузили в DS значение 0 (через регистр АХ). Это результат сегментной организации памяти процессора 8086. По умолчанию, когда ВХ используется в качестве указателя на ячейку памяти, он ссылается на нее относительно сегментного регистра DS. Регистр ВХ может интерпретироваться, как два восьмибитовых (8-разрядных) регистра - ВН и BL. Специализация регистра СХ - использование в качестве счетчика. Предположим, мы хотим 10 раз повторить выполнение блока инструкции. Это можно сделать следующим образом: Begin: <блок инструкций, который нужно повторить> Инструкции между меткой Begin и инструкцией JNZ будут повторяться до тех пор, пока содержимое регистра СХ не станет равным 0. 'Заметим, что чтобы уменьшить содержимое СХ и перейти на начало цикла Begin, если регистр СХ еще не равен 0. здесь используются две инструкции - SUB СХЛ и JNZ. Уменьшение значения счетчика и цикл - это часто используемый элемент программы, поэтому в процессоре 8086 используется специальная инструкция для того, чтобы циклы выполнялись быстрее и были более компактными. Эта инструкция называется LOOP. Инструкция LOOP (инструкция цикла) вычитает 1 из значения регистра СХ и выполняет переход, если содержимое регистра СХ не равно 0 (все это в одной инстрлтшни). Для приведенного выше примера можно записать такой эквивалент: mov сх,10 Begin: <блок инструкций, который нужно повторить> Регистр СХ можно интерпретировать, как два 8-разрядных регистра СН и CL. Регистр DX - это единственный регистр, которые может использоваться в качестве указателя адреса ввода-вывода в инструкциях IN и OUT. Фактически, кроме использования регистра DX нет другого способа адресоваться к портам ввода-вывода с 256 по 65535. Например, в следующем фрагменте программы в порт 878h (LPT) записывается значение 62: mov al,62 Другие уникальные качества регистра DX относятся к операциям деления и умножения. Когда вы делите 32- или 16-битовый делитель, старшие 16 бит делимого должны быть помешены в регистр DX. После выполнения деления остаток также сохраняется в DX. (Младшие 16 бит делимого должны быть помешены в АХ. Частное от деления также будет записано в АХ.) Аналогично, когда вы перемножаете два 16-битовых сомножителя, старшие 16 бит произведения сохраняются в DX (младшие 16 бит записываются в регистр АХ). Регистр DX можно интерпретировать, как два 8-разрядных регистра – DH и DL. Регистр SI может использоваться, как указатель на ячейку памяти. Например: mov ах,0 Здесь 8-бнтовое значение, содержащееся по адресу 20, записывается в регистр AL. Особенно полезно использовать регистр SI для ссылки на память в строковых инстр\"кциях процессора 8086. Например: mov ах,0 Здесь не только содержимое по адресу памяти, на который указывает SL сохраняется в регистре АХ, но к SI также добавляется 1. Это может оказаться очень эффективным при организации доступа к последовательным ячейкам памяти (например, к строке текста). Кроме того, можно сделать так. что строковые инстр\"кцин будут автоматически определенное число раз повторять свои действия, так что отдельная инструкция может выполнить сотни, а иногда и тысячи действий. Регистр DI очень похож на регистр SI в том плане, что его можно использовать в качестве указателя ячейки памяти. При использовании его в строковых инструкциях он имеет также особые свойства. Например: mov ах,0 Здесь 8-бнтовое значение, расположенное по адресу 1024, записывается в регистр BL. При использовании его в строковых инструкциях регистр DI несколько отличается от регистра SL В то время как SI всегда используется в cld mov dx,0 Строковая инструкция STOSB используется здесь и для сохранения значения в регистре AL (по адресу памяти, на который указывает регистр DI). и для добавления к содержимом}." регистра DI 1. Регистр BP также может использоваться в качестве указателя на ячейку памяти, но здесь есть некоторые отличия. Регистры ВХ. SI и DI обычно ссылаются на память относительно сегментного регистра DS (или, в случае использования в строковых инструкциях регистра DI, относительно сегментного регистра ES), а регистр BP адресуется к памяти относительно регистра SS (сегментный регистр стека). Стек находится в сегменте, на который указывает регистр SS. Например: push bp Здесь выполняется обращение к сегменту стека для загрузки в АХ первого параметра, передаваемого при вызове Турбо Си подпрограммы на Ассемблере. Если говорить кратко, то регистр BP создан для обеспечения работы с параметрами, локальными переменными другой адресации к памяти с использованием стека. Регистр SP называется также указателем стека. Это "наименее общий" из регистров общего назначения, поскольку он практически всегда используется для специальной цели - обеспечения стека. Стек - это область памяти, в которой можно сохранять значения и из которой они могут затем извлекаться по дисциплине "последний — пришел — первый - ушел" (LIFO). То есть последнее сохраненное в стеке значение будет первым значением, которое вы получите при чтении из стека. Регистр SP в каждый момент времени указывает на вершину стека. Действие, состоящее в занесении значений в стек, называют также "заталкиванием" (pushing) в стек. В самом деле, инструкция PUSH используется для занесения значений в стек. Аналогично, действие, состоящее в извлечении (выборке) значений из стека, называют также "выталкиванием" (popping) из стека (для этого используется инструкция POP). На рисунке 3 показывается, как изменяются регистры SP. АХ и BP по мере выполнения следующего кода (при этом подразумевается, что начальное значение SP равно 1000. а круглые скобки означают содержимое регистров и ячеек памяти): mov ах, 1 Рисунок 3. Регистры AX, BX SP и стек Внимание! Стек используется всякий раз, когда вы вызываете подпрограмму. Кроме того, стек используют некоторые системные ресурсы, когда они прерывают процессор, чтобы выполнить свои функции. Если вы измените SP, даже на несколько инструкций, то правильное значение стека может оказаться недоступным, когда он потребуется системным ресурсам. Лекция 54 Адресация памяти в МП 8086
|