ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


Фин.пирамиды на этом сайте

 

Часть 9

                                                 345
     4MOV5 - Пересылка данных
P    ЪДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод      іКоманда       іЧисло   і  Описание                
   і
    іоперации і              ітактовыхі                          
   і
    і         і              іциклов  і                          
   і
    ГДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    і88 /r    іMOV r/m8,r8   і  1     іПересылка байтового регист
ра і
    і         і              і        ів байт r/m                
   і
    і89 /r    іMOV r/m16,r16 і  1     іПересылка регистра - слова
   і
    і         і              і        ів слово r/m               
   і
    і89 /r    іMOV r/m32,r32 і  1     іПересылка регистра - двойн
огоі
    і         і              і        іслова в двойное слово r/m 
   і
    і8A /r    іMOV r8,r/m8   і  1     іПересылка байта r/m       
   і
    і         і              і        ів байтовый регистр        
   і
    і8B /r    іMOV r16,r/m16 і  1     іПересылка слова r/m       
   і
    і         і              і        ів регистр - слово         
   і
    і8B /r    іMOV r32,r/m32 і  1     іПересылка двойного слова r
/m і
    і         і              і        ів регистр - двойное слово 
   і
    і8C /r    іMOV r/m16,Sregі  3/3   іПересылка сегментного     
   і
    і         і              і        ірегистра в слово r/m      
   і
    і8E /r    іMOV Sreg,r/m16і  3/9   іПересылка слова r/m       
   і
    і         і              і        ів сегментный регистр      
   і
    іA0       іMOV AL,moffs8 і  1     іПересылка байта в         
   і
    і         і              і        і(сегмент:смещение) в AL   
   і
    іA1       іMOV AX,moffs16і  1     іПересылка слова в         
   і
    і         і              АДї      і(сегмент:смещение) в AX   
   і
    іA1       іMOV EAX,moffs32 і1     іПересылка двойного слова в
   і
    і         і                і      і(сегмент:смещение) в EAX  
   і
    іA2       іMOV moffs8, AL  і1     іПересылка AL  в           
   і
    і         і                і      і(сегмент:смещение)        
   і
    іA3       іMOV moffs16,AX  і1     іПересылка AX  в           
   і
    і         і                і      і(сегмент:смещение)        
   і
    іA3       іMOV moffs32,EAX і1     іПересылка EAX в           
   і
    і         і                і      і(сегмент:смещение)        
   і
    іB0 + rb  іMOV reg8,imm8   і1     іПересылка непосредственног
о  і
    і         і                і      ібайта в регистр           
   і
    іB8 + rw  іMOV reg16,imm16 і1     іПересылка непосредственног
о  і
    і         і                і      іслова в регистр           
   і
    АДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
346
P    ЪДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод      іКоманда       іЧисло   і  Описание                
   і
    іоперации і              ітактовыхі                          
   і
    і         і              іциклов  і                          
   і
    ГДДДДДДДДДЕДДДДДДДДДДДДДДБДВДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    іB8 + rd  іMOV reg32,imm32 і1     іПересылка непосредственног
о  і
    і         і                і      ідвойного слова в регистр  
   і
    іC6       іMOV r/m8,imm8   і1     іПересылка непосредственног
о  і
    і         і                і      ібайта в байт r/m          
   і
    іC7       іMOV r/m16,imm16 і1     іПересылка непосредственног
о  і
    і         і                і      іслова в слово r/m         
   і
    іC7       іMOV r/m32,imm32 і1     іПересылка непосредственног
о  і
    і         і                і      ідвойного слова в          
   і
    і         і                і      ідвойное  слово в r/m      
   і
    АДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
Примечания: moffs8,  moffs16 и  moffs32  состоят  из
     простого  смещения  относительно базы сегмента.
     8,  16 и 32 обозначают размер  данных.  Атрибут
     размера адреса команды определяет размер смеще-
     ния, 16 или 32 бита.
     Работа команды
DEST <- SRC;
     Описание
    Команда MOV копирует второй операнд в первый.
    Если операнд назначения это  сегментный  регистр
(DS,  ES, SS и т.д.), то в регистр также загружаются
данные из дескриптора.  Данные для регистра  берутся
из элемента дескрипторной таблицы,  соответствующего
селектору.  Пустой селектор (значения 0000-0003) мо-
жет  быть  загружен  в регистры DS и ES,  не вызывая
исключения;  однако,  использование регистров DS или
ES вызовет особую ситуацию #GP(0), и ссылка к памяти
не произойдет.
    Команда MOV пересылки в SS запрещает все  преры-
                                                 347
вания до конца выполнения следующей команды (которая
чаще всего является командой MOV в ESP).
    Загрузка сегментного регистра в защищенном режи-
ме приводит к специальным проверкам и действиям, как
описано в следующем листинге:
IF SS загружен;
THEN
  IF селектор пустой THEN #GP(0);
FI;
  PИндекс селектора должен быть в границах его дескрипторной та
блицыM
     PиначеM #GP(PселекторM);
  PRPL селектора должен быть равен CPL иначеM #GP(Pселектор
M);
PБайт AR должен обозначать сегмент данных, доступный для записи
M
   PиначеM #GP(PселекторM);
  PDPL в байте AR должен быть равен CPL иначе #GP(селекторM);
  PСегмент должен быть отмечен как Присутствующий иначеM #SS(
PселекторM);
  PЗагрузка SS селектором;M
  PЗагрузка SS дескриптором;M
FI;
IF PDS, ES, FS или GS загружен не-пустым селектором;M
THEN
  PИндекс селектора должен быть в границах его дескрипторной та
блицыM
     PиначеM #GP(PселекторM);
  PБайт AR должен обозначать сегмент данных или кодовый сегмент
,M
     Pдоступный для чтения иначеM #GP(PселекторM);
  IF Pсегмент данных или не-конформный кодовый сегментM
  THEN Pи RPL, и CPL должны быть меньше или равны DPL в байте A
R;M
  ELSE #GP(PселекторM);
  FI;
  PСегмент должен быть отмечен как ПрисутствующийM
     PиначеM #NP(PселекторM);
  PЗагрузка сегментного регистра селектором;M
  PЗагрузка сегментного регистра дескриптором;M
FI;
IF PDS, ES, FS или GS загружен пустым селектором;M
THEN
  PЗагрузка сегментного регистра селектором;M
  PОчистка бита Достоверности дескриптора;M
FI;
348
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP, #SS и #NP,  если загружается сегментный ре-
гистр;
    #GP(0),если назначением является сегмент, недос-
тупный для записи;
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в  случае недопустимого адреса в сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для невыравненной ссылки к памяти при  теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если  какая-либо  часть операнда
лежит вне пространства исполнительных адресов  от  0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:  #PF (код сбоя) для страничных сбоев. #AC для
невыравненной  ссылки  к  памяти  при текущем уровне
привилегированности, равном 3.
                                                 349
     4MOV5 - Пересылка данных в специальные
           регистры и из них
P    ЪДДДДДДДДВДДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод     і Команда       іЧисло   і  Описание                
   і
    іоперацииі               ітактовыхі                          
   і
    і        і               іциклов  і                          
   і
    ГДДДДДДДДЕДДДДДДДДДДДДДДДБДВДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    і0F 22 /rі MOV CR0,r32     і16    іПересылка (регистра) в    
   і
    і        і                 і      іуправляющий регистр       
   і
    і0F 20 /rі MOV r32,CR0/    і4     іПересылка (управляющего ре
ги-і
    і        і     CR1/CR2     і      істра) в (регистр)         
   і
    і0F 22 /rі MOV CR2/CR3,r32 і4     іПересылка (регистра) в    
   і
    і        і                 і      і(управляющий регистр)     
   і
    і0F 21 /rі MOV r32,DR0 - 3 і10    іПересылка (отладочного рег
и- і
    і        і                 і      істра) в (регистр)         
   і
    і0F 21 /rі MOV r32,DR6/DR7 і10    іПересылка (отладочного рег
и- і
    і        і                 і      істра) в (регистр)         
   і
    і0F 23 /rі MOV DR0 - 3,r32 і11    іПересылка (регистра) в    
   і
    і        і                 і      і(отладочный регистр)      
   і
    і0F 23 /rі MOV DR6/DR7,r32 і11    іПересылка (регистра) в    
   і
    і        і                 і      і(отладочный регистр)      
   і
    і0F 24 /rі MOV r32,TR4/TR5 і4     іПересылка (тестового реги-
   і
    і        і     TR6/TR7     і      істра) в (регистр)         
   і
    і0F 26 /rі MOV TR4/TR5/TR6/і      іПересылка (регистра)      
   і
    і        і     TR7,r32     і      ів (тестовый регистр)      
   і
    і0F 24 /rі MOV r32,TR3     і4     іПересылка (тестового реги-
   і
    і        і                 і      істра3) в (регистр)        
   і
    і0F 26 /rі MOV TR3,r32     і6     іПересылка (регистра)      
   і
    і        і                 і      ів (тестовый  регистр3)    
   і
    АДДДДДДДДБДДДДДДДДДДДДДДДДДБДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
     Работа команды
DEST <- SRC;
     Описание
    Показанные выше  формы команды MOV сохраняют или
загружают следующие специальные  регистры  в/из  ре-
350
гистров общего назначения:
     - Управляющие регистры CR0, CR2 и CR3
     - Отладочные регистры DR0, DR1, DR2, DR3, DR6 и
       DR7
     - Тестовые регистры TR3, TR4, TR5, TR6 и TR7
    С этими командами всегда используются 32-разряд-
ные операнды, независимо от атрибута размера операн-
да.
     Изменяемые флаги
    Флаги OF, SF, ZF, AF, PF и CF неопределены.
     Исключения защищенного режима
    #GP, если текущий уровень привилегированности не
равен 0.
     Исключения режима реальных адресов
    Отсутствуют
     Исключения виртуального режима 8086
    #GP(0) при попытке выполнения команды.
     Примечания
    Команды должны  выполняться на уровне привилеги-
рованности 0 в режиме реальных адресов;  в противном
случае возникает исключение защиты.
    Поле reg в байте ModR/M задает,  какой из специ-
альных  регистров в каждой категории участвует.  Два
бита поля mod  всегда  равны  11.  Поле  r/m  задает
участвующий регистр общего назначения.
    Неопределенным или зарезервированным битам всег-
да  должны  быть присвоены состояния,  в которых они
находились при предыдущем считывании.
                                                 351
     4MOVS/MOVSB/MOVSW/MOVSD5 - Пересылка данных из
                              строки в строку
       ЪДДДДДДДДДВДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДї
       іКод      іКоманда     іЧисло   і  Описание              і
       іоперации і            ітактовыхі                        і
       і         і            іциклов  і                        і
       ГДДДДДДДДДЕДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДґ
       іA4       іMOVS m8,m8  і  7     іПересылка байта         і
       і         і            і        і[(E)SI] в ES:[(E)DI]    і
       іA5       іMOVS m16,m16і  7     іПересылка слова         і
       і         і            і        і[(E)SI] в ES:[(E)DI]    і
       іA5       іMOVS m32,m32і  7     іПересылка двойного словаі
       і         і            і        і[(E)SI] в ES:[(E)DI]    і
       іA4       іMOVSB       і  7     іПересылка байта         і
       і         і            і        іDS:[(E)SI] в ES:[(E)DI] і
       іA5       іMOVSW       і  7     іПересылка слова         і
       і         і            і        іDS:[(E)SI] в ES:[(E)DI] і
       іA5       іMOVSD       і  7     іПересылка двойного словаі
       і         і            і        іDS:[(E)SI] в ES:[(E)DI] і
       АДДДДДДДДДБДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДЩ
     Работа команды
IF (PкомандаM = MOVSD) OR (Pкоманда имеет операнды-двойные 
словаM)
THEN OperandSize <- 32;
ELSE OperandSize <- 16;
IF AddressSize = 16 THEN Pиспользовать SI как индекс-источника
M
                         Pи DI как индекс-назначения;M
ELSE (* AddressSize = 32 *)
   Pиспользовать ESI как индекс-источника и EDI как индекс-назн
ачения;M
FI;
IF Pбайтовый тип командыM
THEN
  [Pиндекс-назначенияM] <- [Pиндекс-источникаM]; (* Назн
ачение байта *)
  IF DF = 0 THEN IncDec <- 1 ELSE IncDec <- -1; FI;
ELSE
352
  IF OperandSize = 16
  THEN
    [Pиндекс-назначенияM] <- [Pиндекс-источникаM]; (*Наз
начение слова*)
    IF DF = 0 THEN IncDec <- 2 ELSE IncDec <- -2; FI;
  ELSE
    [Pиндекс-назначенияM] <- [Pиндекс-источникаM]; (* На
значение
                                                  двойного слова
*)
    IF DF = 0 THEN IncDec <- 4 ELSE IncDec <- -4; FI;
  FI;
FI;
Pиндекс-источникаM <- Pиндекс-источникаM + IncDec;
Pиндекс-назначенияM <- Pиндекс-назначенияM + IncDec;
     Описание
    Команда MOVS копирует байт или слово из  [(E)SI]
в  байт  или слово в ES:[(E)DI].  Операнд назначения
должен адресоваться из регистра ES:  переопределение
сегмента для операнда назначения невозможно. Переоп-
ределение сегмента может быть использовано для  опе-
ранда-источника  (исходного операнда):  по умолчанию
принимается регистр DS.
    Адрес операндов источника и назначения определя-
ется  исключительно  содержимым  регистров  (E)SI  и
(E)DI. Перед выполнением команды MOVS вы должны заг-
рузить в регистры (E)SI и (E)DI правильные значения.
Команды MOVS,  MOVSW и MOVSD являются синонимами ко-
манды MOVS для работы с байтами,  словами и двойными
словами, соответственно.
    После пересылки данных происходит автоматическое
продвижение  регистров  (E)SI и (E)DI.  Если флаг DF
равен 0 (была выполнена команда CLD), то выполняется
инкремент  регистров;  если же флаг DF равен 1 (была
выполнена команда STD), то выполняется декремент ре-
гистров. Регистры инкрементируются или декрементиру-
ются на единицу,  если выполнялась пересылка  байта,
на  2,  если  выполнялась пересылка слова,  и на 4 -
двойного слова.
    Команде MOVS  может  предшествовать  префикс REP
для пересылки сразу CX байтов или слов.  Подробности
об этом см. в описании префикса REP.
                                                 353
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0), если  назначением является сегмент,  не-
доступный для записи;
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:
    #PF (код сбоя) для страничных сбоев. #AC для не-
выравненной  ссылки к памяти при текущем уровне при-
вилегированности, равном 3.
354
     4MOVSX5 - Пересылка с расширением знаком
P    ЪДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод      іКоманда       іЧисло   і  Описание                
   і
    іоперации і              ітактовыхі                          
   і
    і         і              іциклов  і                          
   і
    ГДДДДДДДДДЕДДДДДДДДДДДДДДБВДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    і0F BE /r іMOVSX r16,r/m8 і 3/3   іПересылка байта в слово   
   і
    і         і               і       іс расширением знаком      
   і
    і0F BE /r іMOVSX r32,r/m8 і 3/3   іПересылка байта в двойное 
   і
    і         і               і       іслово с расширением знаком
   і
    і0F BF /r іMOVSX r32,r/m16і 3/3   іПересылка слова в двойное 
   і
    і         і               і       іслово с расширением знаком
   і
    АДДДДДДДДДБДДДДДДДДДДДДДДДБДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
     Работа команды
DEST <- SignExtend(SRC);
     Описание
    Команда MOVSX считывает содержимое  исполнитель-
ного адреса или регистра в байте или слове, расширя-
ет это значение знаком в  соответствии  с  атрибутом
размера  операнда команды (16 или 32 бита) и записы-
вает результат в регистр назначения.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в  случае недопустимого адреса в сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для невыравненной ссылки к памяти при  теку-
                                                 355
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если  какая-либо  часть операнда
лежит вне пространства исполнительных адресов  от  0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:  #PF (код сбоя) для страничных сбоев. #AC для
невыравненной  ссылки  к  памяти  при текущем уровне
привилегированности, равном 3.
     4MOVZX5 - Пересылка с расширением нулем
P    ЪДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод      іКоманда       іЧисло   і  Описание                
   і
    іоперации і              ітактовыхі                          
   і
    і         і              іциклов  і                          
   і
    ГДДДДДДДДДЕДДДДДДДДДДДДДДБВДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    і0F B6 /r іMOVZX r16,r/m8 і 3/3   іПересылка байта в слово   
   і
    і         і               і       іс расширением нулем       
   і
    і0F B6 /r іMOVZX r32,r/m8 і 3/3   іПересылка байта в двойное 
   і
    і         і               і       іслово с расширением нулем 
   і
    і0F B7 /r іMOVZX r32,r/m16і 3/3   іПересылка слова в двойное 
   і
    і         і               і       іслово с расширением нулем 
   і
    АДДДДДДДДДБДДДДДДДДДДДДДДДБДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
     Работа команды
DEST <- ZeroExtend(SRC);
356
     Описание
    Команда MOVZX  считывает содержимое исполнитель-
ного адреса или регистра в байте или слове, расширя-
ет  это  значение  нулем  в соответствии с атрибутом
размера операнда команды (16 или 32 бита) и  записы-
вает результат в регистр назначения.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:  #PF (код сбоя) для страничных сбоев. #AC для
невыравненной ссылки к  памяти  при  текущем  уровне
привилегированности, равном 3.
                                                 357
     4MUL5 - Умножение без знака AL или AX
P    ЪДДДДДДДДВДДДДДДДДДДДДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод     і Команда    іЧисло       іОписание                 
   і
    іоперацииі            ітактовых    і                         
   і
    і        і            іциклов      і                         
   і
    ГДДДДДДВДБДДДДДДДДДДДДЕДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    іF6 /4 і MUL AL,r/m8  і13/18,13/18 іУмножение без знака      
   і
    і      і              і            і(AX <- AL * байт r/m)    
   і
    іF7 /4 і MUL AX,r/m16 і13/26,13/26 іУмножение без знака      
   і
    і      і              і            і(DX:AX <- AX * слово r/m)
   і
    іF7 /4 і MUL EAX,r/m32і13/42,13/42 іУмножение без знака      
   і
    і      і              і            і(EDX:EAX <- EAX *        
   і
    і      і              і            ідвойное слово r/m)       
   і
    АДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
Примечания: Процессор i486 использует алгоритм умно-
    жения типа "early-out". Фактическое число такто-
    вых циклов зависит от позиции наиболее значащего
    бита в оптимизируемом множителе. Оптимизация вы-
    полняется как для положительных, так и для отри-
    цательных значений. Вследствие данного алгоритма
    даются минимальные и максимальные количества та-
    ктовых циклов. Для вычисления фактического числа
    тактовых циклов используется следующая формула:
    Фактическое число  тактовых циклов = если m <> 0
то max (наименьшее целое число, большее (log |m|)) +
6 циклов. 2 Фактическое число тактовых циклов = если
m = 0 то 9 циклов. (где m это множитель)
     Работа команды
IF операция байтового размера
THEN AX <- AL * r/m8
ELSE P(* Операция размером в слово или двойное слово *)M
  IF OperandSize = 16
  THEN DX:AX <- AX * r/m16
  ELSE P(* OperandSize = 32 *)M
    EDX:EAX <- EAX * r/m32
  FI;
FI;
358
     Описание
    Команда IMUL выполняет умножение без  знака.  Ее
действие  зависит от размера операндов следующим об-
разом:
    - Операнд размером в байт умножается на значение
AL; результат помещается в регистр AX. Если значение
AH равно 0,  то флаги CF и OF очищаются; в противном
случае они установлены.
    - Операнд  размером в слово умножается на значе-
ние AX; результат помещается в пару регистров DX:AX.
Регистр DX содержит при этом старшие 16 битов произ-
ведения.  Если значение DX равно 0, то флаги CF и OF
очищаются; в противном случае они установлены.
    - Операнд размером в двойное слово умножается на
значение EAX;  результат помещается в пару регистров
EDX:EAX.  Регистр  EDX  содержит при этом старшие 32
бита произведения.  Если значение EDX  равно  0,  то
флаги CF и OF очищаются;  в противном случае они ус-
тановлены.
     Изменяемые флаги
    Если старшая половина  результата  равна  0,  то
флаги OF и CF очищаются;  в противном случае они ус-
тановлены; флаги SF, ZF, AF, PF и CF неопределены.
     Исключения защищенного режима
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
                                                 359
     Исключения режима реальных адресов
    Прерывание 13,  если  какая-либо  часть операнда
лежит вне пространства исполнительных адресов  от  0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:  #PF (код сбоя) для страничных сбоев; #AC для
невыравненной  ссылки  к  памяти  при текущем уровне
привилегированности, равном 3.
     4NEG5 - Отрицание с дополнением до двух
P       ЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДД
ДДї
       іКод      іКоманда  і Число   і  Описание                і
       іоперации і         і тактовыхі                          і
       і         і         і циклов  і                          і
       ГДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДґ
       іF6 /3    іNEG r/m8 і  1/3    іОтрицание с дополнением доі
       і         і         і         ідвух байта r/m            і
       іF7 /3    іNEG r/m16і  1/3    іОтрицание с дополнением доі
       і         і         і         ідвух слова r/m            і
       іF7 /3    іNEG r/m32і  1/3    іОтрицание с дополнением доі
       і         і         і         ідвух двойного слова r/m   і
       АДДДДДДДДДБДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
M
     Работа команды
IF r/m = 0 THEN CF <- 0 ELSE CF <- 1; FI;
r/m <- - r/m
     Описание
    Команда NEG  замещает значение регистра или опе-
ранда памяти соответствующим  дополнением  до  двух.
Операнд  вычитается из нуля,  а результат помещается
360
обратно в операнд.
    Флаг CF установлен,  если операнд не равен нулю,
когда флаг CF очищается.
     Изменяемые флаги
    Флаг CF установлен,  если операнд не равен нулю,
когда флаг CF очищается; флаги OF, SF, ZF и PF уста-
навливаются в соответствии с результатом.
     Исключения защищенного режима
    #GP(0), если назначением является  сегмент,  не-
доступный для записи;
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для невыравненной ссылки к памяти при  теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:
    #PF (код сбоя) для страничных сбоев.
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
                                                 361
     4NOP5 - Нет операции
P       ЪДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДВДДДДДДДДДДДДДДДДДДДД
ДДї
       іКод     і Команда      і Число   і  Описание            і
       іоперацииі              і тактовыхі                      і
       і        і              і циклов  і                      і
       ГДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДґ
       і90      і NOP          і  1      іНет операции          і
       АДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДЩ
M
     Описание
    Команда NOP не выполняет никакой  операции.  Ко-
манда NOP это однобайтовая команда, которая занимает
место в памяти,  но не влияет на контекст машины, за
исключением регистра (E)IP.
    Команда NOP  представляет  собой   мнемонический
алиас для команды XCHG (E)AX, (E)AX.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    Отсутствуют
     Исключения режима реальных адресов
    Отсутствуют
     Исключения виртуального режима 8086
    Отсутствуют
362
     4NOT5 - Отрицание с дополнением до одного
           (поразрядное дополнение)
P    ЪДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод      іКоманда       іЧисло   і  Описание                
   і
    іоперации і              ітактовыхі                          
   і
    і         і              іциклов  і                          
   і
    ГДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    іF6 /2    іNOT r/m8      і 1/3    іИзменение на противоположн
ое і
    і         і              і        ізначения каждого бита в   
   і
    і         і              і        ібайте r/m                 
   і
    іF7 /2    іNOT r/m16     і 1/3    іИзменение на противоположн
ое і
    і         і              і        ізначения каждого бита в   
   і
    і         і              і        іслове r/m                 
   і
    іF7 /2    іNOT r/m32     і 1/3    іИзменение на противоположн
ое і
    і         і              і        ізначения каждого бита в   
   і
    і         і              і        ідвойном слове r/m         
   і
    АДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
     Работа команды
r/m <- NOT r/m;
     Описание
    Команда NOT инвертирует операнд: каждая 1 стано-
вится 0, и наоборот.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0), если  назначением является сегмент,  не-
доступный для записи;
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
                                                 363
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:
    #PF (код сбоя) для страничных сбоев.
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     4OR5 - Логическое исключающее ИЛИ
P    ЪДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДї
    іКод      іКоманда    іЧисло   і  Описание                   
  і
    іоперации і           ітактовыхі                             
  і
    і         і           іциклов  і                             
  і
    ГДДДДДДДДДЕДДДДДДДДДДДБДДВДДДВДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДґ
    і0C ib    іOR AL,imm8    і1  іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного байта и AL        
  і
    і0D iw    іOR AX,imm16   і1  іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного слова и AX        
  і
    і0D id    іOR EAX,imm32  і1  іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного двойного слова и E
AXі
    і80 /1 ib іOR r/m8,imm8  і1/3іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного байта и байта в r/
m і
    і81 /1 iw іOR r/m16,imm16і1/3іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного слова и слова в r/
m і
    АДДДДДДДДДБДДДДДДДДДДДДДДБДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДЩM
364
P    ЪДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДї
    іКод      іКоманда    іЧисло   і  Описание                   
  і
    іоперации і           ітактовыхі                             
  і
    і         і           іциклов  і                             
  і
    ГДДДДДДДДДЕДДДДДДДДДДДБДДВДДДВДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДґ
    і81 /1 id іOR r/m32,imm32і1/3іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного двойного слова и  
  і
    і         і              і   ідвойного слова в r/m           
  і
    і83 /1 ib іOR r/m16,imm8 і1/3іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного расширенного знако
м і
    і         і              і   ібайта и слова в r/m            
  і
    і83 /1 ib іOR r/m32,imm8 і1/3іОперация логического ИЛИ   непо
с-і
    і         і              і   іредственного расширенного знако
м і
    і         і              і   іслова и двойного слова в r/m   
  і
    і08 /r    іOR r/m8,r8    і1/3іОперация логического ИЛИ       
  і
    і         і              і   ібайтового регистра и байта в r/
m і
    і09 /r    іOR r/m16,r16  і1/3іОперация логического ИЛИ       
  і
    і         і              і   ірегистра-слова и слова в r/m   
  і
    і09 /r    іOR r/m32,r32  і1/3іОперация логического ИЛИ       
  і
    і         і              і   ірегистра-двойного слова и      
  і
    і         і              і   ідвойного слова в r/m           
  і
    і0A /r    іOR r8,r/m8    і1/2іОперация логического ИЛИ   байт
а і
    і         і              і   ів r/m и байтового регистра     
  і
    іOB /r    іOR r16,r/m16  і1/2іОперация логического ИЛИ   слов
а і
    і         і              і   ів r/m и регистра-слова         
  і
    іOB /r    іOR r32,r/m32  і1/2іОперация логического ИЛИ       
  і
    і         і              і   ідвойного слова в r/m и регистра
- і
    і         і              і   ідвойного слова                 
  і
    АДДДДДДДДДБДДДДДДДДДДДДДДБДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДЩM
     Работа команды
DEST <- DEST OR  SRC;
CF <- 0;
OF <- 0;
     Описание
    Команда OR вычисляет исключающее ИЛИ для ее двух
операндов  и  помещает  результат  в первый операнд.
                                                 365
Каждый бит результата равен 0, если оба соответству-
ющих  бита операнда равны 0;  в противном случае бит
результата равен 1.
     Изменяемые флаги
    Флаги CF и OF очищаются;
    флаги PF, SF и ZF устанавливаются в соответствии
с результатом;
    флаг AF неопределен.
     Исключения защищенного режима
    #GP(0), если  результат должен помещаться в сег-
мент, для которого запрещена запись;
    #GP(0) в  случае  недопустимого  исполнительного
адреса операнда памяти в сегментах CS,  DS,  ES,  FS
или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Те же исключения,  что и для режима реальных ад-
ресов:
    #PF (код сбоя) для страничных сбоев;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
366
     4OUT5 - Вывод в порт
P    ЪДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДї
    іКод     і Команда   іЧисло        іОписание                 
   і
    іоперацииі           ітактовых     і                         
   і
    і        і           іциклов       і                         
   і
    ГДДДДДДВДБДДДДДДДДДДДЕДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДґ
    іE6 ib і OUT imm8,AL і16,pm=11*/   іВывод байта AL в непосред
ст-і
    і      і             і31**,vm=29   івенно заданный номер порт
а  і
    іE7 ib і OUT imm8,AX і16,pm=11 */  іВывод слова AX в непосред
ст-і
    і      і             і31**,vm=29   івенно заданный номер порт
а  і
    іE7 ib іOUT imm8,EAX і16,pm=11*/   іВывод двойного слова EAX 
в  і
    і      і             і31**,vm=29   інепосредственно заданный 
   і
    і      і             і             іномер порта в            
   і
    іEE    і OUT DX,AL   і16,pm=11*/   іВывод байта AL в порт,   
   і
    і      і             і31**,vm=29   іномер которого задан в DX
   і
    іEF    і OUT DX,AX   і16,pm=11*/   іВывод слова AX в порт,   
   і
    і      і             і31**,vm=29   іномер которого задан в DX
   і
    іEF    іOUT DX,EAX   і16,pm=11*/   іВывод двойного слова EAX 
в  і
    і      і             і31**,vm=29   іпорт,номер которого задан
 DXі
    АДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДЩM
     Примечания: * если CPL <= IOPL
                ** если CPL > IOPL
     Работа команды
IF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))
THEN (* Виртуальный режим 8086 или защищенный режим при CPL > IO
PL *)
  IF NOT I-O-Permission(SRC, width(SRC))
  THEN #GP(0);
  FI;
FI;
[DEST] <- SRC; (*используемое адресное пространство ввода/вывода
*)
     Описание
    Команда IN  пересылает  байт или слово данных из
заданного вторым операндом регистра (AL, AX или EAX)
в выходной порт, номер которого задан первым операн-
дом. Доступ к любому порту от 0 до 65535 выполняется
путем  помещения номера порта в регистр DX и исполь-
                                                 367
зования команды OUT с регистром DX в качестве перво-
го  операнда.  Если  команда  содержит идентификатор
восьми-битового порта, то значение расширяется нулем
до 16 битов.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0), если текущий уровень привилегированности
больше (т.е. привилегированность меньше) уровня при-
вилегированности  ввода/вывода (IOPL) или если любой
из соответствующих битов разрешения  ввода/вывода  в
TSS равен 1.
     Исключения режима реальных адресов
    Отсутствуют
     Исключения виртуального режима 8086
    Сбой #GP(0), если любой из соответствующих битов
разрешения ввода/вывода в TSS равен 1.
     4OUTS/OUTSB/OUTSW/OUTSD5 - Вывод строки в порт
P     ЪДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДї
     іКод     і Команда   іЧисло      іОписание                  
    і
     іоперацииі           ітактовых   і                          
    і
     і        і           іциклов     і                          
    і
     ГДДДДДДВДБДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДґ
     і6E    іOUTS DX,r/m8 і17,pm=10*/ і  Вывод байта [(E)SI] в по
рт, і
     і      і             і32**,vm=30 і  заданный в DX           
    і
     і6F    іOUTS DX,r/m16і17,pm=10*/ і  Вывод слова [(E)SI] в по
рт, і
     і      і             і32**,vm=30 і  заданный в DX           
    і
     АДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДЩM
368
P     ЪДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДД
ДДДДДДДї
     іКод     і Команда   іЧисло      іОписание                  
    і
     іоперацииі           ітактовых   і                          
    і
     і        і           іциклов     і                          
    і
     ГДДДДДДВДБДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДґ
     і6F    іOUTS DX,r/m32і17,pm=10*/ і  Вывод двойного слова [(E
)SI]і
     і      і             і32**,vm=30 і  в порт, заданный в DX   
    і
     і6E    іOUTSB        і17,pm=10*/ іВывод байта DS:[(E)SI] в п
орт,і
     і      і             і32**,vm=30 і  заданный в DX           
    і
     і6F    іOUTSW        і17,pm=10*/ іВывод слова DS:[(E)SI] в п
орт,і
     і      і             і32**,vm=30 і  заданный в DX           
    і
     і6F    іOUTSD        і17,pm=10*/ іВывод двойн. слова DS:[(E)
SI] і
     і      і             і32**,vm=30 і  в порт, заданный в DX   
    і
     АДДДДДДБДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
ДДДДЩM
     Примечания: * если CPL <= IOPL
                ** если CPL > IOPL
     Работа команды
IF AddressSize = 16
THEN Pиспользование SI как индекса-источника;M
ELSE (* AddressSize = 32 *)
   Pиспользование ESI как индекса-источника;M
FI;
IF (PE = 1) AND ((VM = 1) OR (CPL > IOPL))
THEN (* Виртуальный режим 8086 или защищенный режим при CPL > IO
PL *)
  IF NOT I-O-Permission(DEST, width(DEST))
  THEN #GP(0);
  FI;
FI;
IF команда байтового типа
THEN
  [DX] <-[индекс-источника];  (* Запись байта в адресное
                  пространство ввода/вывода согласно DX *)
  IF DF = 0 THEN IncDec <- 1 ELSE IncDec <- -1; FI;
FI;
IF OperandSize = 16
                                                 369
THEN
  [DX] <- [Pиндекс-источникаM];  (* Запись слова в адресное
                        пространство ввода/вывода согласно DX *)
  IF DF = 0 THEN IncDec <- 2 ELSE IncDec <- -2; FI;
FI;
IF OperandSize = 32
THEN
  [DX] <- [Pиндекс-источникаM] <- [DX];  (* Запись двойного 
слова
             в адресное пространство ввода/вывода согласно DX *)
  IF DF = 0 THEN IncDec <- 4 ELSE IncDec <- -4; FI;
FI;
Pиндекс-источникаM <- Pиндекс-источникаM + IncDec;
     Описание
    Команда OUTS  пересылает данные из байта,  слова
или двойного слова памяти,  заданного регистром  ин-
декса-источника в порт вывода,  адресуемый регистром
DX.  Если атрибут размера адреса для данной  команды
равен  16 битам,  то в качестве регистра индекса-ис-
точника используется регистр SI; в противном случае,
когда атрибут размера адреса равен 32 битам, регист-
ром индекса-источника является ESI.
    Команда OUTS  не  позволяет задавать номер порта
непосредственным значением. Порт должен адресоваться
значением  в регистре DX.  Перед выполнением команды
OUTS в DX должно быть загружено правильное значение.
    Адрес источника  данных  определяется содержимым
регистра индекса источника. Перед выполнением коман-
ды OUTS в регистр индекса источника должно быть заг-
ружено правильное значение индекса.
    После выполнения  пересылки  регистр индекса ис-
точника соответственным образом автоматически  прод-
вигается.  Если  флаг DF равен 0 (была выполнена ко-
манда CLD),  то происходит инкремент  региста;  Если
флаг  DF  равен  1 (была выполнена команда STD),  то
происходит его декремент.  Инкремент  или  декремент
регистра равен 1 при выводе байта, 2 при выводе сло-
ва и 4 при выводе двойного слова.
    Команды OUTSB,  OUTSW и OUTSD - это синонимы ко-
370
манды  OUTS,  работающие с байтом,  словом и двойным
    Команды OUTSB,  OUTSW и OUTSD - это синонимы ко-
манды  OUTS,  работающие с байтом,  словом и двойным
словом, соответственно. Команде OUTS может предшест-
вовать префикс REP для вывода блока, равного CX бай-
тов или слов. Эта операция описана для команды REP.
     Изменяемые флаги
    Отсутствуют
     Исключения защищенного режима
    #GP(0), если текущий уровень привилегированности
численно больше уровня привилегированности ввода/вы-
вода (IOPL) или если любой из соответствующих  битов
разрешения ввода/вывода в TSS равен 1.  исполнитель-
ного адреса операнда памяти в сегментах CS,  DS, ES,
FS или GS;
    #SS(0) в случае недопустимого адреса в  сегменте
SS;
    #PF(код сбоя) в случае страничного сбоя;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.
     Исключения режима реальных адресов
    Прерывание 13,  если какая-либо  часть  операнда
лежит  вне  пространства исполнительных адресов от 0
до 0FFFFH.
     Исключения виртуального режима 8086
    Сбой #GP(0), если любой из соответствующих битов
разрешения ввода/вывода в TSS равен 1.
    #PF (код сбоя) для страничных сбоев;
    #AC для  невыравненной ссылки к памяти при теку-
щем уровне привилегированности, равном 3.


Яндекс цитирования