Конспект лекций Системное программирование (семестр 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.
STI
(SeT Interrupt flag)
Установка флага прерывания
Схема команды: | sti |
Назначение: установка флага прерывания if в единицу.
Синтаксис
Алгоритм работы:
установить флаг if в единицу.
Состояние флагов после выполнения команды:
09 |
IF |
1 |
Применение:
Данная команда используется для установки флага if в единицу. Такая необходимость может возникнуть при разработке программ обработки прерываний.
... sti ;if=1 |
См. также: урок 2, 15, 17 и команду cli
STOS/STOSB/STOSW/STOSD
(Store String Byte/Word/Double word operands)
Сохранение строки байтов/слов/двойных слов
Схема команды: | stos приемник stosb stosw stosd |
Назначение: сохранение элемента из регистра-аккумулятора al/ax/eax в последовательности (цепочке).
Синтаксис
Алгоритм работы:
- записать элемент из регистра al/ax/eax в ячейку памяти, адресуемую парой es:di/edi. Размер элемента определяется неявно (для команды stos) или конкретной применяемой командой (для команд stosb, stosw, stosd);
- изменить значение регистра di на величину, равную длине элемента цепочки. Знак этого изменения зависит от состояния флага df:
- df=0 — увеличить, что означает просмотр от начала цепочки к ее концу;
- df=1 — уменьшить, что означает просмотр от конца цепочки к ее началу.
- df=0 — увеличить, что означает просмотр от начала цепочки к ее концу;
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги |
Применение:
Команды сохраняют элемент из регистров al/ax/eax в ячейку памяти. Перед командой stos можно указать префикс повторения rep, в этом случае появляется возможность работы с блоками памяти, заполняя их значениями в соответствии с содержимым регистра ecx/cx.
;заполнить некоторую область памяти пробелами str db 'Какая-то строка' len_str=$-str ... mov ax,@data mov ds,ax mov es,ax cld mov al,' ' lea di,str mov cx,len_str rep stosb ;заполняем пробелами строку str |
;пример совместной работы stosb и lodsb: ;копировать одну строку в другую до первого пробела str1 db 'Какая-то строка' len_str1=$-str str2 db len_str1 dup (' ') ... mov ax,@data mov ds,ax mov es,ax cld mov cx,len_str1 lea si,str1 lea di,str2 m1: lodsb cmp al,' ' jc exit ;выход, если пробел stosb loop m1 exit: |
См. также: урок 11 и команды ins/insb/insw/insd, cmps/cmpsb/cmpsw/cmpsd, movs/movsb/movsw/movsd, outs, scas/scasb/scasw/scasd, lods/lodsb/lodsw/lodsd, rep/repe/repz/repne/repnz
SUB
(SUBtract)
Вычитание
Схема команды: | sub операнд_1,операнд_2 |
Назначение: целочисленное вычитание.
Синтаксис
Алгоритм работы:
- выполнить вычитание операнд_1=операнд_2-операнд_1;
- установить флаги.
Состояние флагов после выполнения команды:
11 | 07 | 06 | 04 | 02 | 00 |
OF | SF | ZF | AF | PF | CF |
r | r | r | r | r | r |
Применение:
Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.
;выполнить вычитание 64-битных значений: vich_1-vich_2 vich_1 dd 2 dup (0) vich_2 dd 2 dup (0) rez dd 2 dup (0) ... ;ввести значения в поля vich_1 и vich_2: ;младший байт по младшему адресу ... mov eax,vich_1 sub eax,vich_2 ;вычесть младшие половинки чисел mov rez,eax ;младшая часть результата mov eax,vich_1+4 sbb eax,vich_2+4 ;вычесть старшие половинки чисел mov rez+4,eax ;старшая часть результата |
См. также: урок 8, приложение 7 и команду sbb