При безусловном внутрисегментном прямом переходе новое значение , где предполагается, что перед вычислением адреса перехода содержимое IP уже указывает на команду, следующую за командой перехода.
Команда, имеющая 8-разрядное смещение, называется командой короткого перехода и имеет в символической записи после мнемоники команды префикс short. Смещение записывается в дополнительном коде, который перед сложением с текущим значением IP расширяется знаком до 16 разрядов. Таким образом, диапазон адресов переходов для команды короткого перехода составляет -128...+127 байтов относительно текущего значения IP.
(рис 8.1) Схема внутрисегментного прямого перехода
Пример 1.
Команда JMP short L осуществляет передачу управления команде, помеченной меткой L.
Пусть эта команда перехода записана по адресу 010A. Тогда если метке L соответствует, например, адрес 011A, то смещение в команде перехода будет равно:
011A - (010A+2)=011A-010C=011A+FEF4=0E
Здесь операция вычитания заменена сложением с использованием дополнительного кода отрицательного числа. Перенос за пределы разрядной сетки в операциях, связанных с вычислением смещения, игнорируется.
Машинное представление команды следующее:

Обратим внимание на то, что в качестве текущего значения IP взят адрес команды перехода, увеличенный на 2, так как длина самой команды перехода равна 2 байтам.
Если команда, помеченная меткой L, располагается по адресу 00C1, то смещение будет равно:
00C1-010C=00C1+FEF4=FFB5
Полученное смещение имеет длину 2 байта, что недопустимо для данного FFB5h = 11111111 10110101b ), то это смещение можно закодировать в 1 байте, и команда будет иметь машинное представление: EBB5h.
Если метке L соответствует адрес 0224, то необходимая величина смещения, равная 0224-010C=0118, не может быть записана в 8-разрядном формате. Следовательно, с помощью команды короткого перехода осуществить переход на указанный адрес невозможно.
Пример 2.
По машинному представлению команды перехода можно определить, на какой адрес в сегменте команд будет передано управление. Так команда, имеющая машинный код EB4Ch и расположенная по адресу 0100h, осуществляет передачу управления на команду с адресом: (0100+2)+004C=014E, а команда с кодом EBC4h, расположенная по тому же адресу, осуществляет передачу управления по адресу (0100+2)+FFC4=00C6.
Для осуществления безусловного перехода по любому адресу в пределах данного командного сегмента необходимо задавать 16-разрядное смещение. Команда, имеющая такую величину смещения, называется командой близкого перехода и имеет префикс near. Значение IP и 16-разрядное смещение суммируются как числа со знаком в дополнительном коде. При этом, как и в предыдущем случае, перенос из 16-го разряда игнорируется. Поэтому увеличение или уменьшение величины IP при выполнении этой команды зависит не от знака смещения, а от соотношения текущего значения IP и смещения.
Рассмотрим это положение на следующем примере.
Пример 3.
Пусть команда JMP near L имеет машинное представление E964A6h. Тогда если она расположена по адресу 310A, то управление будет передано на команду с адресом:
(310A+3)+A664=D771
Если команда перехода находится по адресу C224, то управление будет передано на команду с адресом 688B ( C224+3+A664 с учетом игнорирования переноса за пределы 16-разрядной сетки).
В первом случае переход произошел в сторону больших, а во втором - в сторону меньших адресов.
Отметим, что здесь текущее значение IP на 3 больше адреса команды близкого прямого перехода, так как сама эта команда имеет длину 3 байта.
Внутрисегментную прямую адресацию часто называют IP.
При внутрисегментном косвенном переходе содержимое .
(рис 8.2) Схема внутрисегментного косвенного перехода
Пример 4.
Команда JMP BX осуществляет переход к ячейке памяти, адрес которой равен содержимому регистра BX.
Машинное представление этой команды:

Если в BX записано число 2976, то вне зависимости от текущего значения IP управление будет передано на команду, записанную, начиная с адреса 2976.
Пример 5.
Команда JMP [BX]+A4h имеет машинное представление:

Если содержимое регистра BX равно 2976, то адрес перехода будет взят из слова оперативной памяти, содержащегося в сегменте данных по адресу: 2976+A4=2A1A.
Команды межсегментных переходов меняют как содержимое IP, так и содержимое CS.
Команда межсегментного прямого перехода имеет в символической записи префикс far и заносит в IP и CS новые значения, заданные в самой команде.
Пример 6.
Пусть необходимо осуществить передачу управления на команду, помеченную меткой L и располагающуюся в другом программном сегменте со следующими координатами: (CS)=AA66, (IP)=11C2. Символическая запись такой команды перехода будет следующей:
JMP far L
а ее машинное представление:

При межсегментном косвенном переходе новые значения .
(рис 8.3) Схема межсегментного косвенного перехода
Отличие внутрисегментного косвенного перехода от межсегментного косвенного в
В сомнительных случаях тип перехода может задаваться явным образом с помощью префиксов word ptr и dword ptr соответственно для внутрисегментного и межсегментного переходов.
Пример 7.
Пусть (BX)=24A4, [24A4]=11, [24A5]=12, [24A6]=13, [24A7]=.
Тогда команда JMP dword ptr [BX] имеет машинное представление

и передает управление команде, расположенной в кодовом сегменте (CS)=5A13 со смещением (IP)=1211.
Команда JMP word ptr [BX] имеет машинное представление

и передает управление команде, расположенной в том же кодовом сегменте со смещением (IP)=1211.
Команды условных переходов являются только внутрисегментными. В них значение IP, соответствующее адресу перехода, формируется при выполнении определенных условий, то есть при определенном значении флагов IP остается его текущее значение, то есть адрес команды, следующей за командой условного перехода.
Пример 8.
Пусть команда JZ L расположена по адресу 2010h, а метка L соответствует адресу 2072h. Получим машинное представление этой команды.
Смещение будет равно:
2072 - (2010+2)=2072+DFEE=0060
Это число со знаком может быть закодировано в 1 байте, следовательно, такой переход возможен. Используя код команды из табл. 6.4 (лекция 6), получим машинное представление этой команды: 7460 h.
Рассматриваемая команда передаст управление по адресу 2072, если к моменту ее выполнения ZF=1. При состоянии признака ZF регистра флагов, равном нулю, управление будет передано следующей команде, то есть по адресу 2012.
Теперь рассмотрим пример
Необходимо сложить l слов a[i], расположенных последовательно в оперативной памяти, начиная с адреса [31A6h], а результат записать по адресу [3000h].
Один из возможных вариантов программы, не использующий 31A4h. Начальное значение IP взято произвольно.
| Символическая запись | Комментарий | IP |
Машинное представление | |
|---|---|---|---|---|
| 2-й код | 16-й код | |||
MOV CX,[31A4h] |
CX = l |
0100 |
|
|
SUB AX,AX |
S = 0 |
0104 |
|
|
MOV SI,AX |
i = 0 |
0106 |
|
|
CYC: ADD AX,[SI+31A6h] |
S = S+a[i] |
0108 |
|
|
ADD SI,2 |
i = i+1 |
010C |
|
|
DEC CX |
l = l-1 |
010F |
|
|
JNZ CYC |
перейти, если $$l \ne 0$$ | 0110 |
|
|
MOV [3000h],AX |
SUM = S |
0112 |
|
|
Отметим некоторые особенности использования отдельных команд этой программы. Обнуление регистра AX осуществляется вычитанием его содержимого из самого себя. Переход к новому слагаемому достигается использованием регистровой относительной адресации с изменением на каждом шаге содержимого индексного регистра на длину слагаемого, то есть на 2. Последняя команда, засылка результата, закодирована в специальном формате работы с аккумулятором.
Для специалиста, работающего с компьютером как на программном, так и на аппаратном уровне, иногда возникает необходимость идентифицировать командную информацию, хранящуюся в оперативной памяти. Это может потребоваться, например, в случае программно-аппаратного сбоя, причину и место которого трудно определить традиционными методами и средствами тестирования и отладки программ. Так как исполняемый модуль программы хранится в памяти в машинном представлении, то для лучшего понимания действий, выполняемых компьютером в определенный момент, целесообразно преобразовать команду к символическому виду. Программы, выполняющие такое преобразование, называются
Рассмотрим несколько примеров подобных преобразований. Для правильной интерпретации команды необходимо знать положение ее первого байта. В рассматриваемых примерах будем полагать, что оно известно.
Пример 9.
Представить 0000h.
Так как поля команды определяются с точностью до бита, то необходимо сначала перейти от шестнадцатеричного к двоичному представлению команды и, исходя из общих принципов

По таблице машинного представления команд (см. табл. 6.4, лекция 6) определим, что КОП= 000000 b соответствует общему формату операции сложения ADD. Тогда два младших бита первого байта кодируют признаки d и w, а второй байт является постбайтом, определяющим AL ( reg=000, w=0 ) (см. табл. 6.1, лекция 6) и байт памяти, адресуемый с помощью базово-индексной адресации через регистры BX и SI (, r/m=000 ) (см. табл. 6.2, лекция 6). Значение d=0 указывает, что регистр AL является операндом-источником.
Следовательно,
ADD [BX+SI],AL
Пример 10.
Представить 81475D398B h.
Переходим к двоичному представлению команды:

Первый байт, согласно таблице машинного представления команд, соответствует команде сложения с непосредственным операндом. и r/m: (BX)+disp8 (см. табл. 6.2, лекция 6), а среднее поле
Адресация операнда требует указания в команде 8-разрядного смещения. Оно помещается сразу же за постбайтом. Последние байты команды кодируют непосредственный операнд. Значение sw=01 в первом байте команды указывает на то, что непосредственный операнд - 16-разрядный. Учитывая, что при кодировании в команде двухбайтовых величин сначала записывается их младший байт, получим следующую
ADD [BX+5D],8B39h
Пример 11.
Пусть машинная форма представления команды следующая: 0445h. Тогда ее двоичный вид:

По таблице машинного представления команд определяем, что это команда специального формата, обеспечивающая суммирование аккумулятора с непосредственным операндом.
Так как w=0, то непосредственный операнд имеет длину 1 байт, а в качестве аккумулятора используется регистр AL. При этом команда имеет следующий вид:
ADD AL,45h
При безусловном внутрисегментном прямом переходе новое значение , где предполагается, что перед вычислением адреса перехода содержимое IP уже указывает на команду, следующую за командой перехода.
Команда, имеющая 8-разрядное смещение, называется командой короткого перехода и имеет в символической записи после мнемоники команды префикс short. Смещение записывается в дополнительном коде, который перед сложением с текущим значением IP расширяется знаком до 16 разрядов. Таким образом, диапазон адресов переходов для команды короткого перехода составляет -128...+127 байтов относительно текущего значения IP.
(рис 8.1) Схема внутрисегментного прямого перехода
Пример 1.
Команда JMP short L осуществляет передачу управления команде, помеченной меткой L.
Пусть эта команда перехода записана по адресу 010A. Тогда если метке L соответствует, например, адрес 011A, то смещение в команде перехода будет равно:
011A - (010A+2)=011A-010C=011A+FEF4=0E
Здесь операция вычитания заменена сложением с использованием дополнительного кода отрицательного числа. Перенос за пределы разрядной сетки в операциях, связанных с вычислением смещения, игнорируется.
Машинное представление команды следующее:

Обратим внимание на то, что в качестве текущего значения IP взят адрес команды перехода, увеличенный на 2, так как длина самой команды перехода равна 2 байтам.
Если команда, помеченная меткой L, располагается по адресу 00C1, то смещение будет равно:
00C1-010C=00C1+FEF4=FFB5
Полученное смещение имеет длину 2 байта, что недопустимо для данного FFB5h = 11111111 10110101b ), то это смещение можно закодировать в 1 байте, и команда будет иметь машинное представление: EBB5h.
Если метке L соответствует адрес 0224, то необходимая величина смещения, равная 0224-010C=0118, не может быть записана в 8-разрядном формате. Следовательно, с помощью команды короткого перехода осуществить переход на указанный адрес невозможно.
Пример 2.
По машинному представлению команды перехода можно определить, на какой адрес в сегменте команд будет передано управление. Так команда, имеющая машинный код EB4Ch и расположенная по адресу 0100h, осуществляет передачу управления на команду с адресом: (0100+2)+004C=014E, а команда с кодом EBC4h, расположенная по тому же адресу, осуществляет передачу управления по адресу (0100+2)+FFC4=00C6.
Для осуществления безусловного перехода по любому адресу в пределах данного командного сегмента необходимо задавать 16-разрядное смещение. Команда, имеющая такую величину смещения, называется командой близкого перехода и имеет префикс near. Значение IP и 16-разрядное смещение суммируются как числа со знаком в дополнительном коде. При этом, как и в предыдущем случае, перенос из 16-го разряда игнорируется. Поэтому увеличение или уменьшение величины IP при выполнении этой команды зависит не от знака смещения, а от соотношения текущего значения IP и смещения.
Рассмотрим это положение на следующем примере.
Пример 3.
Пусть команда JMP near L имеет машинное представление E964A6h. Тогда если она расположена по адресу 310A, то управление будет передано на команду с адресом:
(310A+3)+A664=D771
Если команда перехода находится по адресу C224, то управление будет передано на команду с адресом 688B ( C224+3+A664 с учетом игнорирования переноса за пределы 16-разрядной сетки).
В первом случае переход произошел в сторону больших, а во втором - в сторону меньших адресов.
Отметим, что здесь текущее значение IP на 3 больше адреса команды близкого прямого перехода, так как сама эта команда имеет длину 3 байта.
Внутрисегментную прямую адресацию часто называют IP.
При внутрисегментном косвенном переходе содержимое .
(рис 8.2) Схема внутрисегментного косвенного перехода
Пример 4.
Команда JMP BX осуществляет переход к ячейке памяти, адрес которой равен содержимому регистра BX.
Машинное представление этой команды:

Если в BX записано число 2976, то вне зависимости от текущего значения IP управление будет передано на команду, записанную, начиная с адреса 2976.
Пример 5.
Команда JMP [BX]+A4h имеет машинное представление:

Если содержимое регистра BX равно 2976, то адрес перехода будет взят из слова оперативной памяти, содержащегося в сегменте данных по адресу: 2976+A4=2A1A.
Команды межсегментных переходов меняют как содержимое IP, так и содержимое CS.
Команда межсегментного прямого перехода имеет в символической записи префикс far и заносит в IP и CS новые значения, заданные в самой команде.
Пример 6.
Пусть необходимо осуществить передачу управления на команду, помеченную меткой L и располагающуюся в другом программном сегменте со следующими координатами: (CS)=AA66, (IP)=11C2. Символическая запись такой команды перехода будет следующей:
JMP far L
а ее машинное представление:

При межсегментном косвенном переходе новые значения .
(рис 8.3) Схема межсегментного косвенного перехода
Отличие внутрисегментного косвенного перехода от межсегментного косвенного в
В сомнительных случаях тип перехода может задаваться явным образом с помощью префиксов word ptr и dword ptr соответственно для внутрисегментного и межсегментного переходов.
Пример 7.
Пусть (BX)=24A4, [24A4]=11, [24A5]=12, [24A6]=13, [24A7]=.
Тогда команда JMP dword ptr [BX] имеет машинное представление

и передает управление команде, расположенной в кодовом сегменте (CS)=5A13 со смещением (IP)=1211.
Команда JMP word ptr [BX] имеет машинное представление

и передает управление команде, расположенной в том же кодовом сегменте со смещением (IP)=1211.
Команды условных переходов являются только внутрисегментными. В них значение IP, соответствующее адресу перехода, формируется при выполнении определенных условий, то есть при определенном значении флагов IP остается его текущее значение, то есть адрес команды, следующей за командой условного перехода.
Пример 8.
Пусть команда JZ L расположена по адресу 2010h, а метка L соответствует адресу 2072h. Получим машинное представление этой команды.
Смещение будет равно:
2072 - (2010+2)=2072+DFEE=0060
Это число со знаком может быть закодировано в 1 байте, следовательно, такой переход возможен. Используя код команды из табл. 6.4 (лекция 6), получим машинное представление этой команды: 7460 h.
Рассматриваемая команда передаст управление по адресу 2072, если к моменту ее выполнения ZF=1. При состоянии признака ZF регистра флагов, равном нулю, управление будет передано следующей команде, то есть по адресу 2012.
Теперь рассмотрим пример
Необходимо сложить l слов a[i], расположенных последовательно в оперативной памяти, начиная с адреса [31A6h], а результат записать по адресу [3000h].
Один из возможных вариантов программы, не использующий 31A4h. Начальное значение IP взято произвольно.
| Символическая запись | Комментарий | IP |
Машинное представление | |
|---|---|---|---|---|
| 2-й код | 16-й код | |||
MOV CX,[31A4h] |
CX = l |
0100 |
|
|
SUB AX,AX |
S = 0 |
0104 |
|
|
MOV SI,AX |
i = 0 |
0106 |
|
|
CYC: ADD AX,[SI+31A6h] |
S = S+a[i] |
0108 |
|
|
ADD SI,2 |
i = i+1 |
010C |
|
|
DEC CX |
l = l-1 |
010F |
|
|
JNZ CYC |
перейти, если $$l \ne 0$$ | 0110 |
|
|
MOV [3000h],AX |
SUM = S |
0112 |
|
|
Отметим некоторые особенности использования отдельных команд этой программы. Обнуление регистра AX осуществляется вычитанием его содержимого из самого себя. Переход к новому слагаемому достигается использованием регистровой относительной адресации с изменением на каждом шаге содержимого индексного регистра на длину слагаемого, то есть на 2. Последняя команда, засылка результата, закодирована в специальном формате работы с аккумулятором.
Для специалиста, работающего с компьютером как на программном, так и на аппаратном уровне, иногда возникает необходимость идентифицировать командную информацию, хранящуюся в оперативной памяти. Это может потребоваться, например, в случае программно-аппаратного сбоя, причину и место которого трудно определить традиционными методами и средствами тестирования и отладки программ. Так как исполняемый модуль программы хранится в памяти в машинном представлении, то для лучшего понимания действий, выполняемых компьютером в определенный момент, целесообразно преобразовать команду к символическому виду. Программы, выполняющие такое преобразование, называются
Рассмотрим несколько примеров подобных преобразований. Для правильной интерпретации команды необходимо знать положение ее первого байта. В рассматриваемых примерах будем полагать, что оно известно.
Пример 9.
Представить 0000h.
Так как поля команды определяются с точностью до бита, то необходимо сначала перейти от шестнадцатеричного к двоичному представлению команды и, исходя из общих принципов

По таблице машинного представления команд (см. табл. 6.4, лекция 6) определим, что КОП= 000000 b соответствует общему формату операции сложения ADD. Тогда два младших бита первого байта кодируют признаки d и w, а второй байт является постбайтом, определяющим AL ( reg=000, w=0 ) (см. табл. 6.1, лекция 6) и байт памяти, адресуемый с помощью базово-индексной адресации через регистры BX и SI (, r/m=000 ) (см. табл. 6.2, лекция 6). Значение d=0 указывает, что регистр AL является операндом-источником.
Следовательно,
ADD [BX+SI],AL
Пример 10.
Представить 81475D398B h.
Переходим к двоичному представлению команды:

Первый байт, согласно таблице машинного представления команд, соответствует команде сложения с непосредственным операндом. и r/m: (BX)+disp8 (см. табл. 6.2, лекция 6), а среднее поле
Адресация операнда требует указания в команде 8-разрядного смещения. Оно помещается сразу же за постбайтом. Последние байты команды кодируют непосредственный операнд. Значение sw=01 в первом байте команды указывает на то, что непосредственный операнд - 16-разрядный. Учитывая, что при кодировании в команде двухбайтовых величин сначала записывается их младший байт, получим следующую
ADD [BX+5D],8B39h
Пример 11.
Пусть машинная форма представления команды следующая: 0445h. Тогда ее двоичный вид:

По таблице машинного представления команд определяем, что это команда специального формата, обеспечивающая суммирование аккумулятора с непосредственным операндом.
Так как w=0, то непосредственный операнд имеет длину 1 байт, а в качестве аккумулятора используется регистр AL. При этом команда имеет следующий вид:
ADD AL,45h
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.