Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает
Вид материала | Конспект |
Схема команды Состояние флагов после выполнения команды См. также Схема команды Состояние флагов после выполнения команды См. также Схема команды Состояние флагов после выполнения команды См. также |
- 8Б класс Химия Пар. 30 (№1-3), Пар. 31 (№1-5), рабочая тетрадь эти же темы Биология, 8.14kb.
- Рабочая программа учебной дисциплины (модуля) Системное программирование, 108.12kb.
- Смирнягин курс США население Лекция население США этой теме будут посвящены три лекции, 288.75kb.
- Инструкция подумайте о ситуациях, в которых Ваши желания отличаются от желаний другого, 98.01kb.
- Лекция 8 Системное программирование. Системное проектирование взаимодействия процессов., 225.21kb.
- Программа лекций Будущее начинается сегодня! После каждой лекции конкурс с розыгрышем, 75.64kb.
- Программа лекций Будущее начинается сегодня! После каждой лекции конкурс с розыгрышем, 73.71kb.
- Конспект лекций по курсу "Информатика и использование компьютерных технологий в образовании", 1797.24kb.
- Календарно-тематический план лекций по факультетской терапии 4 курс (8 семестр) специальность, 119.31kb.
- Программа вступительного экзамена по специальности 05. 13. 18 Математическое моделирование,, 115.33kb.
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, то уменьшить содержимое этих регистров на длину структурного элемента последовательности;
- если df=0, то увеличить содержимое этих регистров на длину структурного элемента последовательности;
- при наличии префикса выполнить определяемые им 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