1 Системное программное обеспечение Лекции: Ассемблер, система прерываний, основы построения компиляторов, ассемблер «под Windows» Семинары: подготовка.

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



Advertisements
Похожие презентации
Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.
Advertisements

Организация циклов в Ассемблере. Цикл – это многократно повторяющаяся последовательность операторов.
С ИСТЕМА КОМАНД ЕОМ. С ТРУКТУРА ТА ФОРМАТИ КОМАНД.
Архитектура ЭВМ Практика 4. Программы с ветвлениями.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Двоичная система счисления АЛФАВИТ: 1, 10, 11, 100, 101, 110, 111, 1 000, 1 001, 1010, , 1 100, 1 101, 1 110, 1 111, ,
Регистры общего назначения – сумматор, регистр данных, адресный регистр и т.д. Арифметико- логическое устройство Устройство управления
Intel архитектура IA16 Основа большинства современных компьютеров.
Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 3 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович.
1 Лекция 2 Система команд и примеры программ для МП 8086 Лектор: Люличева И.А.
Программирование на языке ассемблер (Assembler)
Урок повторения по теме: «Сила». Задание 1 Задание 2.
1 Лекция 1 Система команд универсальных микропроцессоров Лектор: Люличева И.А.
Адресация Адресация Уточним понятие "адресация". Адресация (по Э. Таненбауму) – процесс определения местоположения операндов команды МП (их адреса). Адрес.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 3 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Микропроцессорные системы ЭФУ АРХИТЕКТУРА 8-РАЗРЯДНОГО МИКРОПРОЦЕССОРА.
Язык ASSEMBLER Команды пересылки данных Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size.
Программирование на языке низкого уровня Ассемблер.
Арифметическиеи логические команды языка Ассемблер. Битовые команды.
Транксрипт:

1 Системное программное обеспечение Лекции: Ассемблер, система прерываний, основы построения компиляторов, ассемблер «под Windows» Семинары: подготовка к лабораторным работам Лаб. работы: 4 – по специальному расписанию Зачет: (кафедральный) по лаб. работам Экзамен: два вопроса и задача на ассемблере

2 1 Машинный язык Структурная схема микропроцессора i8086

3 Регистры a) четыре регистра общего назначения (регистры данных): AX - регистр-аккумулятор, BX - базовый регистр, СХ - счетчик, DX - регистр-расширитель аккумулятора; б) три адресных регистра: SI - регистр индекса источника, DI - регистр индекса результата, BP - регистр-указатель базы; в) три управляющих регистра: SP - регистр-указатель стека, IP - регистр-счетчик команд, PSW - регистр флагов (слово состояния программы); г) четыре сегментных регистра: CS - регистр сегмента кодов, DS - регистр сегмента данных, ES - регистр дополнительного сегмента данных, SS - регистр сегмента стека.

4 Организация основной памяти … Адрес базы Смещение Схема адресация «база +смещение»: A = A б + А см Сегментная схема адресация микропроцессора i8086:

5 Схема адресации Исполнительный адрес База Индекс Смещение + Блок преобразования адресов Сегментный регистр SS Сегментный регистр ES Сегментный регистр DS Сегментный регистр CS Физический адрес (20) ОП Исполнительный адрес (16) Сегментный адрес (16) SI, DI BX, BP Disp Указатель (32)

6 Адресация сегментов 1. Сегмент кода: CS: IP 2. Сегменты данных: BX + DI + BX + SI + BP + DI + DS: BP + SI + ES: BX + BP + SI + DI + 3. Сегмент стека: SS:SP

7 Слово состояния программы (PSW) О- флаг переполнения; D- флаг направления; I- флаг прерывания; Т- флаг трассировки; S- флаг знака: 1 - число 0 ; Z- флаг нуля: 1 - число = 0 ; А- флаг переноса из тетрады; P- флаг четности; С- флаг заема/переноса.

8 Форматы машинных команд р/память р DWMod Reg R/MСм.мл.байтСм. ст.байт D - 1- в регистр, 0 - из регистра W - 1- операнды-слова, 0 - байты W=1 W=0 Sr Reg 000 AX 000 AL 00 ES 001 CX 001 CL 01 CS 010 DX 010 DL 10 SS 011 BX 011 BL 11 DS 100 SP 100 AH 101 BP 101 CH 110 SI 110 DH 111 DI 111 BH Префиксы Код операции 1 байт адресации 2 байта смещения 2 байта данных Mod Disp=0 байт 01 - Disp=1 байт 10 - Disp=2 байта 11 - операнды-регистры литерал р/память WMod 000 R/MСм.мл.байтСм. ст.байтДанные M = 000 EA=(BX)+(SI) +Disp 001 EA=(BX)+(DI) +Disp 010 EA=(BP)+(SI) +Disp 011 EA=(BP)+(DI) +Disp 100 EA=( SI) +Disp 101 EA=(DI) +Disp 110 EA=( BP)+ Disp * 111 EA=(BX) + Disp

9 Примеры машинных команд Примеры: 1) mov BX,CX DW Mod Reg R/M ) mov CX, 6[BX] DW Mod Reg R/M См.мл.байт ) mov byte ptr 6[BX], W Mod 000 R/M См.мл.байт Данные C B 8 B4 F0 6 C A

10 Ассемблер Предложения ассемблера бывают четырех типов: команды или инструкции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора; макрокоманды оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями; директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении; строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

11 Формат команды ассемблера [ :] [ ] ; [ ] Примеры: 1) m1: mov AX,BX ; пересылка числа 2) cbw 3) ; суммы по месяцам

12 Определение полей памяти для размещения данных DB или ( ) или ? [ ] DW DUP ( ) DD DUP ( ? ) Примеры: a db 12 db ? dw 1234H db 5 dup (?) b db A s dw 4,-1 k db b 0 C ? ????? F a b s 0 C k

13 Операнды команд ассемблера 1. Операнды команд ассемблера могут размещаться: а) в регистрах; б) в команде – литералы; в) в памяти. Примеры: 1) mov AX,10 2) mov AX, 6[BX+DI] 2. Длина операнда определяется: а) кодом команды: б) регистром: в) явно: byte ptr, word ptr, dword ptr Пример: mov 0[BX],10 mov word ptr 0[BX],10

14 Команды пересылки / преобразования данных 1. Команда пересылки данных MOV, Примеры: а) mov AX, BX б) mov SI, 1000 в) mov 0[DI], AL г) mov AX, code mov DS, AX Литерал Сегментные регистры AX,BX,CX,DX, SI, DI. SP, BP Оперативная память

15 Команды пересылки / преобразования данных (2) 2. Команда обмена данных ХCHG, Примеры: а) xchg BX, CX б) xchg BX, 0[DI] 3. Команда загрузки исполнительного адреса LEA, Пример: а) lea BX, exword б) lea DI, 6[BX,SI] Адрес сегмента Смещение exword

16 Команды пересылки / преобразования данных (3) 4-5. Команды загрузки указателя LDS, LЕS, Пример: lds SI, exword 6-7. Команда записи слова в стек и извлечения из стека PUSH POP Примеры: push SI pop 0[BX]

17 Команды пересылки / преобразования данных (4) 8-9. Команды сложения ADD, ADC, Пример. Сложение 32-разрядных чисел mov AX,value1 add AX,value2 mov res,AX mov AX,value1+2 adc AX,value2+2 mov res+2,AX Команды вычитания SUB, SBB, мл.байтст.байт

18 Команды пересылки / преобразования данных (5) 12. Команда сравнения СМP, Примеры: а) cmp AX,5 б) cmp byte ptr 0[BX],A Команда добавления/вычитания единицы INC DEC Примеры: inc AX dec byte ptr 8[BX,DI] 15. Команда изменения знака NEG

19 Команды пересылки / преобразования данных (6) Команды умножения MUL IМUL mov AX,4 imul word ptr A

20 Команды пересылки / преобразования данных (7) Команды «развертывания» чисел CBW; AL -> AX CWD; AX -> DX:AX

21 Команды пересылки / преобразования данных (8) Команды деления DIV IDIV mov AX,40 cwd idiv word ptr A

22 Пример программирования выражения X = (A+C)(B-1)/(C+8) Сегмент данных: A dw 25 B dw -6 C dw 11 X dw ? Сегмент кода: mov CX,C add CX,8 mov BX,B dec BX mov AX,A add AX,C imul BX idiv CX mov X,AX

23 Команды передачи управления 1. Команда безусловного перехода short JMP near ptr far ptr Примеры: а) jmp short Label1 б) cycle: … jmp cycle в) jmp BX г) jmp dword ptr [BX]

24 Команды передачи управления (2) 2. Команды условного перехода Команды условного перехода: JZ – переход по "ноль"; JE – переход по "равно"; JNZ – переход по "не нуль"; JNE – переход по "не равно"; JL – переход по "меньше"; JNG, JLE – переход по "меньше или равно "; JG – переход по "больше"; JNL, JGE – переход по "больше или равно "; JA – переход по "выше" (беззнаковое больше); JNA, JBE – переход по "не выше"(беззнаковое не больше); JB – переход по "ниже" (беззнаковое меньше); JNB, JAE – переход по "не ниже" (беззнаковое не меньше).

25 Условный переход на более чем 128 байт jz zero jnz continue jmp zero continue:...

26 Программирование ветвлений cmp... j ELSE jmp COM ELSE: COM:

27 Пример 1. Процедура определения большего числа Написать процедуру вычисления X=max(A,B): max proc near mov AX, A cmp AX, B ; сравнение A и B jl LESS ; переход по меньше mov X, AX jmp CONTINUE ; переход на конец ветвления LESS: mov AX, B mov X, AX CONTINUE: ret max endp

28 Пример 2. Определение НОД (Ex1.asm) code segment assume cs:code,ds:code c dw ? a dw 24 b dw 18 begin proc far push DS mov AX,0 push AX mov AX,code mov DS,AX

29 Пример. Определение НОД (2) mov ax,a mov bx,b cycl: cmp ax,bx je kon jl lit sub ax,bx jmp short com lit: sub bx,ax com: jmp cycl kon: mov c,ax ret begin endp code ends end begin com kon cycl lit

30 Команды передачи управления (3) 3. Команды организации циклической обработки 1) Команда организации цикла LOOP Пример: mov cx, loop_count begin_loop: … loop begin_loop

31 Команды передачи управления (4) 2) Команда перехода по обнуленному счетчику JCXZ Пример: mov cx, loop_count jcxz end_of_loop begin_loop: … loop begin_loop end_of_loop:...

32 Команды передачи управления (5) 3) Команды организации цикла с условием LООРE LOOPNE Пример: mov CX, loop_count jcxz end_of_loop begin_loop: cmp al, 100 loopne begin_loop end_of_loop:...

33 Программирование циклической обработки Определить сумму натуральных чисел 1..n. ; сегмент данных Sdw0 ndw18 ; сегмент кода movCX,n movAX,0 cycle:addAX,CX loopcycle movS,AX S=0 i=1,n S=S+i mov CX,n mov AX,0 movBX,1 cycle: add AX,BX inc BX loop cycle mov S,AX

34 Программирование обработки массивов Adw4,6,-1,7,5 Вариант 1 movAX,0 leaBX,A movCX,5 cycle:addAX,0[BX] addBX,2 loopcycle 4675 A S=0 i=1,n S=S+A[i] Вариант 2 movAX,0 movBX,0 movCX,5 cycle:addAX,A[BX] addBX,2 loopcycle 4675 A DS 4675 A DS BX

35 Adb2,3,1,-1,8 db6,-8,5,4,7 db8,6,3,1,6 movBX,0 movCX,3 cycle1: push CX movCX,5 cycle2:... A[BX] incBX loopcycle2 popCX loop cycle1 Программирование обработки матриц Adb2,3,1,-1,8 db6,-8,5,4,7 db8,6,3,1,6 movBX,0 movCX,3 cycle1: push CX movCX,5 cycle2:... A[BX] incBX loopcycle2 popCX loop cycle A A DS BX movDI,0 movCX,5 cycle1: push CX movCX,3 movBX,0 cycle2:... A[BX,DI] addBX,5 loopcycle2 popCX incDI loop cycle1 DI

36 Пример Определить количество положительных, нулевых и отрицательных значений в массиве code segment assume cs:code,ds:code x dw 1,-1,3,0,15,-4,0 n dw 7 ng dw ? nl dw ? nz dw ? ; begin proc far push ds mov ax,0 push ax mov ax,code mov ds,ax

37 Пример (2) mov cx,n mov bx,0 mov di,bx mov si,bx again: cmp x[bx],0 jle less_or_eq inc di jmp short next less_or_eq: jl next inc si next: add bx,2 dec cx jnz again mov ax,n sub ax,di sub ax,si mov ng,di mov nl,ax mov nz,si ret begin endp code ends end begin nz=0 i=1,n ng=ng+1 ng=0 x[i] 0 >0=0 Начало ng=0 nl=n-ng-nz ng=ng+1 Конец

38 Команды передачи управления (6) 4) Команды вызова подпрограмм а) Команда вызова процедуры CALL б) Команда возврата управления RET [ ] Текст процедуры должен быть оформлен в виде: ргос endp

39 Организация передачи управления в процедуру CALL PROC RET ENDP Основная программа Процедура Адрес возврата Стек 2 или 4 байта

40 Команды обработки строк Элемент: байт или слово Установка/сброс флага направления: STD CLD DS:SI ES:DI Источник Приемник DF =0

41 Команды обработки строк (2) 1) Команда загрузки строки LODS LODSB ; загрузка байта LODSW ; загрузка слова 2) Команда записи строки STOS STOSB ; запись байта STOSW ; запись слова 3) Команда пересылки MOVS. MOVSB ;пересылка байта МОVSW ;пересылки слова DS:SI AX(AL) ES:DI AX(AL) DS:SI ES:DI

42 Команды обработки строк (3) 4) Префиксная команда повторения REP Пример: mov CX,10 lea SI, A lea DI, B rep movsb

43 Команды обработки строк (4) 5) Команда сканирования строки SCAS SCASB ;поиск байта SCASW ;поиск слова AX(AL)-(ES:DI) -> флаги 6) Команда сравнения строк CMPS СMPSB ;сравнение байт СMPSW ;сравнение слов (CS:SI)-(ES:DI) -> флаги AX(AL) DS:SI ES:DI

44 Команды обработки строк (5) 7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно" REPE REPNE Пример: mov CX,10 lea SI, A lea DI, B repe cmpsb

45 Пример. Сравнение строки с таблицей (Ex2_2) A B C D E S F D Y E D H F Y U A B C D R F Y E D K A B C D E S Y U F K S Tabl ES:DI DS:SI Flaq=0 i = 1,6 S=Tabl[i] Flaq=0 нет да Flaq=i

46 Сравнение строки с таблицей (2) code segment assume CS:code,DS:code,ES:code Flag DB 0 S DB 'ABCDE' Tabl DB 'ARTYG','FGJJU' DB 'FGHJK','ABCDY' DB 'ABCDE','FTYRG' begin proc far push DS mov AX,0 push AX mov AX,code mov DS,AX mov ES,AX lea SI,S lea DI,Tabl mov CX,6 mov BL,1 cld

47 Сравнение строки с таблицей (3) Cycle: push SI push DI push CX mov CX,5 repe cmpsb pop CX pop DI pop SI je Found add DI,5 inc BL loop Cycle jmp not_Found Found: mov byte ptr Flag,BL not_Found: ret begin endp code ends end begin

48 Команды манипулирования битами 1. Логические команды NOT ; логическое НЕ; AND, ;логическое И; OR, ;логическое ИЛИ; XOR, ;исключающее ИЛИ; TEST, ; И без записи результата Пример. Выделить из числа в AL первый бит: and al, B

49 Команды манипулирования битами (2) 2. Команды сдвига, СL или 1 Команды: SAL – сдвиг влево арифметический; SHL – сдвиг влево логический; SAR – сдвиг вправо арифметический; SHR – сдвиг вправо логический; ROL – сдвиг влево циклический; ROR – сдвиг вправо циклический; RCL – сдвиг циклический влево с флагом переноса; RCR – сдвиг циклический вправо с флагом переноса CF 0 0 0

50 Команды манипулирования битами (3) Пример. Умножить число в AX на 10: mov bx, ax shl ax, 1 add ax, bx shl ax, 1

51 Управление вводом/выводом IN AL или AX, или DX OUT или DX, AL или AX Пример: inAL, 60H out60H, AL МП Порты Устройство в/в ОП Интерфейс Шина Упр. шиной Инт-сИнт-с Генератор синхронизации