Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемviu6.wwwcom.ru
1 1 Системное программное обеспечение Лекции: Ассемблер, система прерываний, основы построения компиляторов, ассемблер «под Windows» Семинары: подготовка к лабораторным работам Лаб. работы: 4 – по специальному расписанию Зачет: (кафедральный) по лаб. работам Экзамен: два вопроса и задача на ассемблере
2 2 1 Машинный язык Структурная схема микропроцессора i8086
3 3 Регистры a) четыре регистра общего назначения (регистры данных): AX - регистр-аккумулятор, BX - базовый регистр, СХ - счетчик, DX - регистр-расширитель аккумулятора; б) три адресных регистра: SI - регистр индекса источника, DI - регистр индекса результата, BP - регистр-указатель базы; в) три управляющих регистра: SP - регистр-указатель стека, IP - регистр-счетчик команд, PSW - регистр флагов (слово состояния программы); г) четыре сегментных регистра: CS - регистр сегмента кодов, DS - регистр сегмента данных, ES - регистр дополнительного сегмента данных, SS - регистр сегмента стека.
4 4 Организация основной памяти … Адрес базы Смещение Схема адресация «база +смещение»: A = A б + А см Сегментная схема адресация микропроцессора i8086:
5 5 Схема адресации Исполнительный адрес База Индекс Смещение + Блок преобразования адресов Сегментный регистр SS Сегментный регистр ES Сегментный регистр DS Сегментный регистр CS Физический адрес (20) ОП Исполнительный адрес (16) Сегментный адрес (16) SI, DI BX, BP Disp Указатель (32)
6 6 Адресация сегментов 1. Сегмент кода: CS: IP 2. Сегменты данных: BX + DI + BX + SI + BP + DI + DS: BP + SI + ES: BX + BP + SI + DI + 3. Сегмент стека: SS:SP
7 7 Слово состояния программы (PSW) О- флаг переполнения; D- флаг направления; I- флаг прерывания; Т- флаг трассировки; S- флаг знака: 1 - число 0 ; Z- флаг нуля: 1 - число = 0 ; А- флаг переноса из тетрады; P- флаг четности; С- флаг заема/переноса.
8 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 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 10 Ассемблер Предложения ассемблера бывают четырех типов: команды или инструкции, представляющие собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора; макрокоманды оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями; директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении; строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.
11 11 Формат команды ассемблера [ :] [ ] ; [ ] Примеры: 1) m1: mov AX,BX ; пересылка числа 2) cbw 3) ; суммы по месяцам
12 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 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 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 15 Команды пересылки / преобразования данных (2) 2. Команда обмена данных ХCHG, Примеры: а) xchg BX, CX б) xchg BX, 0[DI] 3. Команда загрузки исполнительного адреса LEA, Пример: а) lea BX, exword б) lea DI, 6[BX,SI] Адрес сегмента Смещение exword
16 16 Команды пересылки / преобразования данных (3) 4-5. Команды загрузки указателя LDS, LЕS, Пример: lds SI, exword 6-7. Команда записи слова в стек и извлечения из стека PUSH POP Примеры: push SI pop 0[BX]
17 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 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 19 Команды пересылки / преобразования данных (6) Команды умножения MUL IМUL mov AX,4 imul word ptr A
20 20 Команды пересылки / преобразования данных (7) Команды «развертывания» чисел CBW; AL -> AX CWD; AX -> DX:AX
21 21 Команды пересылки / преобразования данных (8) Команды деления DIV IDIV mov AX,40 cwd idiv word ptr A
22 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 23 Команды передачи управления 1. Команда безусловного перехода short JMP near ptr far ptr Примеры: а) jmp short Label1 б) cycle: … jmp cycle в) jmp BX г) jmp dword ptr [BX]
24 24 Команды передачи управления (2) 2. Команды условного перехода Команды условного перехода: JZ – переход по "ноль"; JE – переход по "равно"; JNZ – переход по "не нуль"; JNE – переход по "не равно"; JL – переход по "меньше"; JNG, JLE – переход по "меньше или равно "; JG – переход по "больше"; JNL, JGE – переход по "больше или равно "; JA – переход по "выше" (беззнаковое больше); JNA, JBE – переход по "не выше"(беззнаковое не больше); JB – переход по "ниже" (беззнаковое меньше); JNB, JAE – переход по "не ниже" (беззнаковое не меньше).
25 25 Условный переход на более чем 128 байт jz zero jnz continue jmp zero continue:...
26 26 Программирование ветвлений cmp... j ELSE jmp COM ELSE: COM:
27 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 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 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 30 Команды передачи управления (3) 3. Команды организации циклической обработки 1) Команда организации цикла LOOP Пример: mov cx, loop_count begin_loop: … loop begin_loop
31 31 Команды передачи управления (4) 2) Команда перехода по обнуленному счетчику JCXZ Пример: mov cx, loop_count jcxz end_of_loop begin_loop: … loop begin_loop end_of_loop:...
32 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 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 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 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 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 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 38 Команды передачи управления (6) 4) Команды вызова подпрограмм а) Команда вызова процедуры CALL б) Команда возврата управления RET [ ] Текст процедуры должен быть оформлен в виде: ргос endp
39 39 Организация передачи управления в процедуру CALL PROC RET ENDP Основная программа Процедура Адрес возврата Стек 2 или 4 байта
40 40 Команды обработки строк Элемент: байт или слово Установка/сброс флага направления: STD CLD DS:SI ES:DI Источник Приемник DF =0
41 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 42 Команды обработки строк (3) 4) Префиксная команда повторения REP Пример: mov CX,10 lea SI, A lea DI, B rep movsb
43 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 44 Команды обработки строк (5) 7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно" REPE REPNE Пример: mov CX,10 lea SI, A lea DI, B repe cmpsb
45 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 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 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 48 Команды манипулирования битами 1. Логические команды NOT ; логическое НЕ; AND, ;логическое И; OR, ;логическое ИЛИ; XOR, ;исключающее ИЛИ; TEST, ; И без записи результата Пример. Выделить из числа в AL первый бит: and al, B
49 49 Команды манипулирования битами (2) 2. Команды сдвига, СL или 1 Команды: SAL – сдвиг влево арифметический; SHL – сдвиг влево логический; SAR – сдвиг вправо арифметический; SHR – сдвиг вправо логический; ROL – сдвиг влево циклический; ROR – сдвиг вправо циклический; RCL – сдвиг циклический влево с флагом переноса; RCR – сдвиг циклический вправо с флагом переноса CF 0 0 0
50 50 Команды манипулирования битами (3) Пример. Умножить число в AX на 10: mov bx, ax shl ax, 1 add ax, bx shl ax, 1
51 51 Управление вводом/выводом IN AL или AX, или DX OUT или DX, AL или AX Пример: inAL, 60H out60H, AL МП Порты Устройство в/в ОП Интерфейс Шина Упр. шиной Инт-сИнт-с Генератор синхронизации
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.