Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
Состояние флагов после выполнения команды
См. также
Подобный материал:
1   ...   25   26   27   28   29   30   31   32   ...   57

OUTS/OUTSB/OUTSW/OUTSD


(OUTput Byte/Word/Double word String to port)

Вывод строки байтов/слов/двойных слов в порт

 

Схема команды: 

outs порт,источник 

outsb 

outsw 

outsd

Назначение: вывод в порт из памяти последовательности байт, слов, двойных слов.

Синтаксис

Алгоритм работы:
  • передать данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si;
  • в зависимости от состояния флага df изменить значение регистров esi/si:
    • если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
    • если df=1, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
  • при наличии префикса выполнить определяемые им deiqrbh (см. команду rep/repe/repz/repne/repnz).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда выводит данные в порт ввода-вывода, номер которого загружен в регистр dx, из ячейки памяти по адресу ds:esi/si (допускается замена сегмента). Недопустимо задание номера порта в команде в виде непосредственного операнда — для этого используется регистр dx. Размеры вводимых элементов зависят от применяемой команды. Команда outs может работать с элементами размером в байт, слово или двойное слово. В качестве операнда в команде указывается символическое имя ячейки памяти, из которой элемент выводится в порт ввода-вывода. Реально символическое имя используется лишь для получения типа элемента последовательности, а ее адрес должен быть предварительно загружен в пару регистров ds:esi/si. Транслятор, обработав команду outs и выяснив тип операндов, генерирует одну из машинных команд outsb, outsw или outsd. Машинного аналога для команды outs нет.

Для того чтобы эти команды можно было использовать для вывода в порт последовательности элементов, имеющих размерность байт, слово или двойное слово, необходимо использовать префикс rep. Он заставляет циклически выполняться команду вывода в порт до тех пор, пока содержимое регистра ecx/cx не станет равным нулю.

.286

;вывести последовательность 10 байт в порт 300h

;(номер порта взят условно)

str_10  db      10 dup(0)

adr_str dd      str_10

        lds     si,adr_str

        mov     dx,300h

rep     outsb

        

См. также: уроки 2, 7, 11 и команды cmps/cmpsb/cmpsw/cmpsd, lods/lodsb/lodsw/lodsd, movs/movsb/movsw/movsd, ins/insb/insw/insd, scas/scasb/scasw/scasd, stos/stosb/stosw/stosd, rep/repe/repz/repne/repnz

POP


(POP operand from the stack)

Извлечение операнда из стека

 

Схема команды: 

pop приемник 

Назначение: извлечение слова или двойного слова из стека.

Синтаксис

Алгоритм работы:

Алгоритм работы команды зависит от установленного атрибута размера адреса — use16 или use32:
  • загрузить в приемник содержимое вершины стека (адресуется парой ss:esp/sp);
  • увеличить содержимое esp/sp на 4 (2 байта) для use32 (соответственно для use16).

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

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

my_proc proc    near

        push    ax

        push    bx

;тело процедуры, в которой изменяется содержимое

;регистров ax и bx

...

        pop     bx

        pop     ax

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды popa, popad, popf, popfd, push, pusha, pushad, pushf, pushfd

POPA


(POP All general registers from the stack)

Извлечение всех регистров общего назначения из стека

 

Схема команды: 

popa 

Назначение: извлечение из стека регистров общего назначения di, si, bp, sp, bx, dx, cx, ax.

Синтаксис

Алгоритм работы:
  • извлечь из стека последовательно значения и загрузить ими регистры общего назначения di, si, bp, sp, bx, dx, cx, ax. Содержимое di восстанавливается первым. Содержимое sp извлекается, но не восстанавливается;
  • увеличить значение указателя стека esp/sp на 16.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

Команда popa по принципу работы является обратной команде pusha и используется для восстановления содержимого всех регистров общего назначения значениями из стека. Эту команду можно использовать в процедурах и программах обработки прерываний для восстановления регистров общего назначения прерванной программы.

.386

my_proc proc    near

        pusha

;тело процедуры, в которой изменяется

;содержимое регистров общего назначения

...

        popa

        ret

        endp

        

См. также: уроки 7, 10, 14, 15, 16, 17 и команды pop, popad, popf, popfd, push, pusha, pushad, pushf, pushfd