Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 3 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович.

Презентация:



Advertisements
Похожие презентации
Арифметическиеи логические команды языка Ассемблер. Битовые команды.
Advertisements

Архитектура ЭВМ Практика 4. Программы с ветвлениями.
N – входной блок (64 бита) X – раундовый ключ (32 бита) H – таблица замен.
Организация циклов в Ассемблере. Цикл – это многократно повторяющаяся последовательность операторов.
Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.
Циклы в языке Ассемблер.. Цикл со счетчиком Цикл со счетчиком можно организовать с помощью конструкций IF и GOTO. В нашем примере тело цикла должно повторяться.
Микропроцессоры и микропроцессорные системы. 1. Пересылка данных MOV приемник, источник- Пересылка данных Базовая команда пересылки данных. Копирует содержимое.
Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size.
Числа со знаком и дополнительный код Синтаксис FASM Для записи отрицательного числа в программе на ассемблере используется символ -, например: x db -5.
Архитектура ЭВМ Практика 5. Программирование циклов.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 6 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
1 Системное программное обеспечение Лекции: Ассемблер, система прерываний, основы построения компиляторов, ассемблер «под Windows» Семинары: подготовка.
1 Лекция 1 Система команд универсальных микропроцессоров Лектор: Люличева И.А.
С ИСТЕМА КОМАНД ЕОМ. С ТРУКТУРА ТА ФОРМАТИ КОМАНД.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Регистры общего назначения – сумматор, регистр данных, адресный регистр и т.д. Арифметико- логическое устройство Устройство управления
Операторы языка. Арифметические операторы Арифметические операторы Арифметические операторы Арифметические операторы Операторы сравнения Операторы сравнения.
Учебный курс Принципы построения и функционирования ЭВМ Лекция 8 Организация памяти в ЭВМ профессор ГУ-ВШЭ, доктор технических наук Геннадий Михайлович.
1 Лекция 1 Система команд универсальных микропроцессоров Лектор: Люличева И.А.
Программирование на языке низкого уровня Ассемблер.
Транксрипт:

Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 3 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович

Команды сравнения и булевых операций Флаги результатов выполнения команд ZF- обнуление CF- выход за границу разрядной сетки SF- копия старшего (знакового) бита OF- нарушение дополнительного кода РF- чётное число бит AND,OR,XOR,NOT TEST,CMP – меняем только флаги Установка и сброс отдельных флагов BT,BTC,BTS,BTR работа с семафорами 2

– – – – Команды условных переходов J?? ; много вариантов – Условия – во флагах – До 386 метка – ближняя (-128…+127 байт) По результатам «сравнения» Equal, Not Equal Greater, Less, Greater or Equal, Less or Equal (со знаком) Above, Below, Above or Equal, Below or Equal (без знака) Примеры: JL - если SF != OF, JB - если CF=1 По состоянию определённого флага [Not] flag {Z|S|C|O|P}F set to 1» JZ, JNZ,…,JP,JNP По состоянию счётчика JCXZ JЕCXZ– обход цикла для реализации «предусловия» 3

Команды циклов LOOP* ; есть варианты LOOP: if (!--ECX) goto. – счётчик только в CX/ECX, – традиционно: цикл с постусловием! – вошёл с СХ/ECX=0 : ещё 2 16 /2 32 раз. LOOPE/LOOPZ : Поиск отличного if(!--ECX || ZF)goto LOOPNE/LOOPNZ : Поиск требуемого if(!--ECX || !ZF)goto. Важно: расстояние до от -128 до 128 байт 4

Условные конструкции ЯВУ(1) mov eax,op1 ebx,op2 ecx,op3 while(op1

Условные конструкции ЯВУ(2) switch(par) { case A: Process_A(); break; case B: Process_B(); break; case C: Process_C(); break; case D: Process_D(); break; } … CaseTable BYTE 'A' DWORD Process_A EntrySize = ($ - CaseTable) BYTE 'B' DWORD Process_B BYTE 'C' DWORD Process_C BYTE 'D' DWORD Process_D NumberOfEntries = ($ - CaseTable)/EntrySize mov al,par mov ebx,OFFSET CaseTable mov ecx,NumberOfEntries L1: cmp al,[ebx] jne L2 call NEAR PTR [ebx + 1] jmp L3 L2: add ebx,EntrySize loop L1 L3: … 6

Условные директивы ассемблера Условная конструкция Сравнения. IF условие1 команды [.ELSEIF условие2 команды] [.ELSE команды].ENDIF Цикл с постусловием. REPEAT команды.UNTIL условие Цикл с преусловием. WHILE условие команды.ENDW – Регистров – без знака – С переменной – как определена Операторы в условиях expr1 == expr2 expr1 != expr2 expr1 > expr2 expr1 >= expr2 expr1 < expr2 expr1

Напоминания Циклы ( LOOP* ) – Важно: расстояние до от -128 до 128 байт Фокусы оптимизации while(op1

Сдвиги ??? SH?D операнд,счётчик получатель,источник,счётчик SHL SAL SHR CF 0 MSB ………… LSB 0 CF SHLD MSB LSB получатель SAR ROL ………… источник SHRD ROR … CFMSBLSB получатель RCL RCR ………… источник 9

Умножение и деление MUL операнд IMUL операнд Множимое AL AX Множимое Множитель reg/mem8 reg/mem16 Множитель Произведение AX DX:AX Произведение DIV операндIDIV операнд Делимое AX DX:AX Делимое Делитель reg/mem8 reg/mem16 Делитель Частное AL AX Частное Остаток AH DX Остаток CBW/CWBE CWD/CDQ -расширение со знаком 10

Тонкости применения Сдвиги – Сдвиг массива – Быстрое умножение – Выделение полей Умножение – без переполнений – CF,OF – большой результат Деление – исключение - деление на нуль – исключение - переполнение 11

Произвольная точность ADC – ADd with Carry SBB – SuBtract with Borrow Сложить ( Вычесть ) «получатель»(1-й аргумент) «источник»(2-й аргумент) «получатель»(результат) ADD ( SUB ) ADC ( SBB ) CF CF H-получатель H-источник H-получатель L-получатель L-источник L-получатель 12

Об основах программирования Создание и инициализация автопеременных Область действия и время жизни переменных Передача параметров – механизм передачи: стек – способы передачи: «по значению» и «по ссылке» – входные, выходные, универсальные параметры Стековые фреймы, контекст Рекурсия 13

Локальные переменные Назначение – Упрощение отладки – Переиспользование памяти – Переиспользование имён BubbleSort PROC LOCAL Temp:DWORD LOCAL SwapFlag:DWORD ; RET BubbleSort ENDP [ESP] Правильное обращение: BubbleSort : push ebp mov ebp,esp add esp,0FFFFFF8h mov esp,ebp pop ebp ret Адрес возврата EBP (сохранён) [ EBP ] Temp [ EBP-4 ] SwapFlag [ EBP-8 ] lea esi,SwapFlag mov eax,[esi] загрузка эффективного адреса обращение по адресу 14

Параметры регистровые и стековые pushad mov esi,OFFSET array mov ecx,LENGTHOF array mov ebx,TYPE array call DumpMem popad push call TYPE array LENGTHOF array OFFSET array DumpMem INVOKE DumpMem,OFFSET array,LENGTHOF array,TYPE array Аргумент INVOKE Примеры Непосредственное значение 10,300h,OFFSET myList,TYPE array Целочисленное выражение Имя переменной Адресное выражение Имя регистра Аргумент INVOKE ( 10*20), COUNT myList, array, Temp, SwapFlag [myList+2], [ebx+esi] eax, bl, edi Примеры ArraySum PROTO ptrArray:PTR DWORD, sZArray:DWORD 15

; ; ; ; ; ; Разные параметры и переменные TITLE ArraySum (ArrySum.asm)ArraySum PROC INCLUDE Irvine32.inc.data Array DWORD 50 DUP(5) push ebp mov ebp,esp sub esp,4 push esi сохранить указатель место для сохранить EBP на локальные локальной ESI.code main PROC mov DWORD PTR sum,0 mov esi,pArray mov ecx,count pushLENGTHOF Array push call OFFSET Array ArraySum L1: mov eax,[esi] ;взять элемент массива add call esp,8 WriteDec Crlf add sum,eax add esi,4 loopd L1 ; добавить с сумме ; к следующему элементу exit main ENDP sum EQU pop mov pop ret esi eax,sum esp,ebp ebp ;;;; восстановить ESI результат в EAX удалить локальные восстановить EBP pArray EQU count EQU ArraySum ENDP 16