Чему равен физический адрес команды процессора intel 8086 если cs 1234 ip 189a

Обновлено: 07.07.2024

сегмент кода (CS) представляет собой 16-разрядный регистр, содержащий адрес сегмента 64 кб с процессором инструкции. Процессор использует сегмент CS для всех обращений к инструкциям, на которые ссылается регистр указателя инструкции (IP). Регистр CS не может быть изменен напрямую. ЗС реестр автоматически обновляется во время Far jump, far call и далеко возвращать инструкции.

указатель инструкции (IP)представляет собой 16-разрядный регистр.

Я действительно не понимаю, что это в основном означает, поэтому, если бы кто-то мог предоставить более "яркое" объяснение, это было бы здорово :)

Так как указатель инструкции (IP) 16 бит, это означает, что вы можете иметь только 64K инструкции (2^16), который не был много даже в 80-х годах. Поэтому для расширения адресного пространства у вас есть второй регистр, который адресует блоки 64k. Вы можете рассматривать cs: ip вместе как один 32-битный регистр, который затем способен адресовать 2^32 байта. т. е. 4G, который вы получаете на процессоре, который использует 32-битные адреса. 8086 использовал 20 бит адресов, поэтому вы могли получить доступ к 1M памяти.

физический адрес рассчитывается из 2 частей. я) адрес сегмента. ii) смещенный адрес. CS (регистр сегментов кода) используется для обращения к сегменту кода памяти i.e место в памяти, где хранится код. Этот IP(указатель команд) содержит смещение в сегменте кода памяти. Следовательно, CS: IP используется для указания на местоположение (i.e для вычисления физического адреса) кода в памяти.

следующая инструкция будет выполнена по адресу памяти, равному:

это позволяет обращаться к 20 битам памяти, несмотря на то, что регистры имеют ширину всего 16 бит (а также создает два разных способа кодирования большинства адресов).

эффект CS аналогичен эффекту других сегментных регистров. Е. Г., DS увеличивает доступ к данным (которые не определяют другой регистр сегмента) 16 * DS .

CS

инструкции, которые изменяют CS:

  • ljmp (далеко прыгать)
  • lcall (дальний вызов), который толкает ip и cs в стек, а затем далеко прыгает
  • lref (far return), который инвертирует вызов far
  • int, который считывает IP / CS из таблицы векторов прерываний
  • iret, который обратный int

CS не может меня изменить mov как и другие сегментные регистры. Попытка кодировать его стандартным идентификатором для CS, что GNU GAS 2.24 делает без жалоб, если вы пишете:

приводит к недопустимому исключению кода при выполнении.

IP

IP увеличивается автоматически всякий раз, когда инструкция выполняется по длине кодировки этой инструкции: вот почему программа движется вперед!

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

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

Как только вы пишете .код в тексте программы сборки .код указывает на значение CS. любая команда позже или раньше в файле будет адресована согласно cs:ip , где ip-значение смещения от cs.

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

поскольку процессор 8086 использует адресацию 20 бит, мы можем получить доступ к 1 МБ памяти, но регистры 8086-это только 16 бит,поэтому для доступа к данным из памяти мы объединяем значения, присутствующие в регистрах сегментов кода и регистрах указателей команд для создания физического адреса, это делается путем перемещения значения CS 4 бит влево, а затем добавьте его со значением IP

пример:

значение CS 1234Hex(hexa decimal)

значение IP 5678Hex

теперь значение CS после перемещения 4 бит влево составляет 12340Hex затем после добавления со значением IP это 179B8Hex, который является физическим адресом

IP register-IP является указателем инструкции. Своя функция это же как ПК (счетчик программы) в другом микропроцессоре который указать к следующей инструкции, который нужно принести блоком Биу для того чтобы быть питанием в блок ЕС.

Регистры процессора i8086 загружены следующим образом:
AX = 41E8h
BX = A01Fh
CX = C100h
DX = 80A1h
SI = 45C8h
DI = 3E8Ch
SP = FFF0h
BP = C7EFh
CS = 7281h
DS = 045Ah
ES = 26FFh
SS = 810Bh
IP = 3107h
Оперативная память, кроме программного кода, заполнена нолями. Процессор выполняет команду xchg ax, 64[bp][di]
Найти адрес, по которому процессор будет обращаться к оперативной памяти по операнду, результат выполнения прогр. и ветер след. исп. команды.

Добавлено через 11 минут
Помогите, пожалуйста, решить данную задачку. Абсолютно не разбираюсь в Ассемблере

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

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

Как узнать к каким интернет ресурсам обращается программа?
Есть ли такая программа для отслеживания к каким интернет ресурсам обращаются программы на моем.

По каким адресам будет записано содержимое регистра AX ?
Преподаватель дал такой код: PUSH AX SS:SP=10 AX 1122 Не могу понять,кто может помочь?

Каким будет содержание регистров после выполнения команд
1. Каким будет содержание регистров IP и CS после выполнения команды JMP FAR PTR OPR, если метка.

KnighTeX, эта задача не на программирование на языке ассемблер, а на понимание работы микропроцессора intel 8086 в реальном режиме
1) Исходные данные. Процессор выполняет команду xchg ax,64[bp][di], AX = 41E8h, BP = C7EFh, DI = 3E8Ch, SS = 810Bh, IP = 3107h, CS = 7281h, оперативная память, кроме программного кода, заполнена нолями
2) Найти адрес, по которому процессор будет обращаться к оперативной памяти по операнду
BP+DI+64h=0C7EFh+3E8Ch+64h=106DFh, базовый регистр при обращении к памяти ВР, значит по умолчанию используется сегментный регистр SS, адрес оперативной памяти = SS*10h+106DFh= 810B0h+106DFh=9178Fh
3) результат выполнения прогр. по адресу 9178Fh появится содержимое регистра АХ, то есть [9178Fh]=41E8h а регистр АХ обнулится (Оперативная память, кроме программного кода, заполнена нолями)
4) и ветер след. исп. команды. Не знаю, что такое " ветер след. исп. команды", возможно имелся в виду вектор ? но адрес следующей исполняемой команды в программе рассчитывается так -- длина команды xchg ax,64[bp][di]=3 байта (код команды 876364h) IP = 3107h, смещение следующей команды 3107h+3=310Ah. Адрес следующей команды в оперативной памяти = CS*10h+310Ah=72810h+310Ah=7591Ah

Микропроцессор Intel-8086 (К1810ВМ80) имеет двухадресную систему команд [8,10]. Ее особенностью является отсутствие команд, использующих оба операнда из оперативной памяти. Исключение составляют лишь команды пересылки и сравнения цепочек байт или слов, которые в данном пособии рассматриваться не будут. Таким образом, в командах допустимы следующие сочетания операндов: RR , RS , RI , SI . Здесь R обозначает операнд , находящийся в одном из регистров регистровой памяти микропроцессора, S - операнд , находящийся в оперативной памяти, адрес которого формируется по одному из допустимых способов адресации , I - непосредственный операнд , закодированный в адресном поле самой команды. Формат команды во многом определяется способом адресации операнда, находящего в оперативной памяти, длиной используемого непосредственного операнда, а также наличием и длиной смещения, используемого при относительных режимах адресации.

Микропроцессор имеет все режимы адресации, общая схема которых была рассмотрена выше. Естественно, они имеют определенные особенности, присущие данному процессору.

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

Адресация оперативной памяти имеет свои особенности, связанные с ее разбиением на сегменты и использованием сегментной группы регистров для указания начального адреса сегмента. 16-разрядный адрес, получаемый в блоке формирования адреса операнда на основе указанного режима адресации, называется эффективным адресом (ЭА). Иногда эффективный адрес обозначается как ЕА ( effective address ). 20-разрядный адрес, который получается сложением эффективного адреса и увеличенного в 16 раз значения соответствующего сегментного регистра , называется физическим адресом (ФА).

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

Прямая адресация предполагает, что эффективный адрес является частью команды. Так как ЭА состоит из 16 разрядов, то и соответствующее поле команды должно иметь такую же длину.

При регистровой косвенной адресации эффективный адрес операнда находится в базовом регистре BX или одном из индексных регистров DI либо SI :

Обозначение имени регистра в квадратных скобках указывает на содержимое соответствующего регистра. Фигурные скобки - символ выбора одной из нескольких возможных альтернатив.

При регистровой относительной адресации эффективный адрес равен сумме содержимого базового или индексного регистра и смещения:

Эффективный адрес при базово-индексной адресации равен сумме содержимого базового и индексного регистров, определяемых командой:

Форматы двухоперандных команд представлены на рис.6.1. Пунктиром показаны поля, которые в зависимости от режима адресации могут отсутствовать в команде.


Рис. 6.1. Форматы двухоперандных команд микропроцессора I8086

Поле КОП содержит код выполняемой операции . Признак w указывает на длину операндов. При w = 1 операция проводится над словами, а при w = 0 - над байтами. Признак d указывает положение приемника результата. Признак d = 1 , если результат записывается на место операнда, закодированного в поле reg , и d = 0 , если результат записывается по адресу, закодированному полями ( md , r/m ).

Второй байт команды, называемый постбайтом , определяет операнды, участвующие в операции. Поле reg указывает регистр регистровой памяти согласно табл. 6.1

Поля md и r/m задают режим адресации второго операнда согласно табл. 6.2.

Итак, как говорится в вопросе, какова цель регистров CS и IP в Intel's 8086?

Я нашел это объяснение:

Кодовый сегмент (CS) - это 16-разрядный регистр, содержащий адрес сегмента 64 КБ с инструкциями процессора. Процессор использует CS-сегмент для всех обращений к инструкциям, на которые ссылается регистр указателя инструкций (IP). Регистр CS нельзя изменить напрямую. Регистр CS автоматически обновляется во время инструкций дальнего перехода, дальнего вызова и дальнего возврата.

Указатель инструкций (IP) является 16-битным регистром.

Я не очень понимаю, что это в основном означает, так что если бы кто-то мог дать более "яркое" объяснение, это было бы здорово:)

Поскольку указатель инструкций (IP) является 16-битным, это означает, что вы можете иметь только 64k инструкций (2^16), что было немного даже в 80-х годах. Таким образом, чтобы расширить адресное пространство, у вас есть второй регистр, который обращается к блокам 64 КБ. Вы могли бы рассматривать cs:ip вместе как один 32-битный регистр, который затем способен обрабатывать 2^32 байта. т.е. 4G, который вы получаете на процессоре, который использует 32-битные адреса. 8086 использовал 20-битные адреса, поэтому вы могли получить доступ к 1М памяти.

Физический адрес рассчитан из 2-х частей. я) адрес сегмента. II) адрес смещения. CS(регистр сегмента кода) используется для адресации сегмента кода памяти, то есть места в памяти, где хранится код. IP(указатель инструкций) содержит смещение в сегменте кода памяти. Следовательно, CS:IP используется для указания местоположения (т.е. для вычисления физического адреса) кода в памяти.

Следующая инструкция будет выполнена по адресу памяти, равному:

Это позволяет адресовать 20 бит памяти, несмотря на то, что регистры имеют ширину всего 16 бит (и это также создает два различных способа кодирования большинства адресов).

Эффект CS аналогичен эффекту других регистров сегмента. Например, DS увеличивает доступ к данным (которые не указывают другой сегментный регистр) на 16 * DS ,

CS

Инструкции, которые изменяют CS:

  • LJMP (прыжок в длину)
  • lcall (дальний вызов), который помещает ip и cs в стек, а затем выполняет дальний переход
  • lref (дальний возврат), который инвертирует дальний вызов
  • int, который читает IP / CS из таблицы векторов прерываний
  • iret, которые обращают int

CS не может меня изменить mov как и другие сегменты регистров. Попытка закодировать его стандартным идентификатором для CS, что GNU GAS 2.24 делает без жалоб, если вы напишите:

приводит к недопустимому исключению кода при выполнении.

IP

IP увеличивается автоматически всякий раз, когда инструкция выполняется по длине кодирования этой инструкции: вот почему программа движется вперед!

IP модифицируется теми же инструкциями, которые модифицируют CS, а также недалекими версиями этих инструкций (более распространенный случай).

IP нельзя наблюдать напрямую, поэтому с ним сложнее играть. Проверьте этот вопрос для альтернатив: чтение счетчика программ напрямую

Читайте также: