Системное программное обеспечение

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

Upload: efrat

Post on 15-Jan-2016

80 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Системное программное обеспечение

1

Системное программное обеспечение

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

Семинары: подготовка к лабораторным работам

Лаб. работы: 4 – по специальному расписанию

Зачет: (кафедральный) по лаб. работамЭкзамен:

два вопроса и задача на ассемблере

Page 2: Системное программное обеспечение

2

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

Page 3: Системное программное обеспечение

3

Регистрыa) четыре регистра общего назначения (регистры данных):

AX - регистр-аккумулятор,BX - базовый регистр,СХ - счетчик,DX - регистр-расширитель аккумулятора;

б) три адресных регистра:SI - регистр индекса источника,DI - регистр индекса результата,BP - регистр-указатель базы;

в) три управляющих регистра:SP - регистр-указатель стека,IP - регистр-счетчик команд, PSW - регистр флагов (слово состояния программы);

г) четыре сегментных регистра:CS - регистр сегмента кодов,DS - регистр сегмента данных,ES - регистр дополнительного сегмента данных,SS - регистр сегмента стека.

Page 4: Системное программное обеспечение

4

Организация основной памяти0 1 2 3 4 5 6 7 …

Адресбазы

Смещение

Схема адресация «база +смещение»: A = Aб + Асм

Сегментная схема адресация микропроцессора i8086:

Page 5: Системное программное обеспечение

5

Схема адресации

Исполнительный адрес

База

Индекс

Смещение

+

Блок преобразования адресов

Сегментный регистрSS

Сегментный регистрES

Сегментный регистрDS

Сегментный регистрCS

Физическийадрес (20)

ОП

Исполнительныйадрес (16)

Сегментныйадрес (16)

SI, DI

BX, BPDisp

Указатель (32)

Page 6: Системное программное обеспечение

6

Адресация сегментов

1. Сегмент кода: CS: IP2. Сегменты данных: BX + DI + <Смещение> BX + SI + <Смещение> BP + DI + <Смещение> DS: BP + SI + <Смещение> ES: BX + <Смещение> BP + <Смещение> SI + <Смещение> DI + <Смещение>3. Сегмент стека: SS:SP

Page 7: Системное программное обеспечение

7

Слово состояния программы (PSW)

О - флаг переполнения;D - флаг направления;I - флаг прерывания;Т - флаг трассировки;S - флаг знака: 1 - число < 0, 0 - число > 0;

Z - флаг нуля: 1 - число = 0;

А - флаг переноса из тетрады; P - флаг четности; С - флаг заема/переноса.

Page 8: Системное программное обеспечение

8

Форматы машинных команд

р/памятьр 100010DW Mod 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 - 00 - Disp=0 байт 01 - Disp=1 байт 10 - Disp=2 байта 11 - операнды-регистры

литералр/память

1100011W Mod 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

Page 9: Системное программное обеспечение

9

Примеры машинных команд

Примеры:

1) mov BX,CX

100010DW Mod Reg R/M

10001001 11 001 011

2) mov CX, 6[BX]

100010DW Mod Reg R/M См.мл.байт

10001011 01 001 111 00000110

3) mov byte ptr 6[BX], 10

1100011W Mod 000 R/M См.мл.байт Данные

11000110 01 000 111 00000110 00001010

8 9 C B

8 B 4 F 0 6

C 6 4 7 0 6 0 A

Page 10: Системное программное обеспечение

10

АссемблерПредложения ассемблера бывают четырех типов: • команды или инструкции, представляющие собой

символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора;

• макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;

• директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;

• строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

Page 11: Системное программное обеспечение

11

Формат команды ассемблера [<Метка> :] <Код операции > [<Спиcок операндов >]

; [<Комментарий>]

Примеры:

1) m1: mov AX,BX ; пересылка числа

2) cbw

3) ; суммы по месяцам

Page 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 00001100b

0 C

?

3 4 1 2

? ? ? ? ?

6 1

0 4 0 0 F F F F

a

b

s

0 Ck

Page 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

Page 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

Оперативнаяпамять

Page 15: Системное программное обеспечение

15

Команды пересылки / преобразования данных (2)

2. Команда обмена данных ХCHG <Операнд 1> , <Операнд 2>

Примеры:

а) xchg BX, CX

б) xchg BX, 0[DI]

3. Команда загрузки исполнительного адреса

LEA <Регистр> , <Операнд 2>

Пример:

а) lea BX, exword

б) lea DI, 6[BX,SI]

Адрессегмента

Смещение

exword

Page 16: Системное программное обеспечение

16

Команды пересылки / преобразования данных (3)

4-5. Команды загрузки указателя

LDS <Регистр> ,<Операнд 2>

LЕS <Регистр > ,<Операнд 2>

Пример:

lds SI, exword

6-7. Команда записи слова в стек и извлечения из стека PUSH <Операнд>

POP <Операнд>

Примеры:

push SI

pop 0[BX]

Page 17: Системное программное обеспечение

17

Команды пересылки / преобразования данных (4)

8-9. Команды сложения

ADD <Операнд 1>, <Операнд 2>

ADC <Операнд 1>, <Операнд 2>

Пример. Сложение 32-разрядных чисел

mov AX,value1

add AX,value2

mov res,AX

mov AX,value1+2

adc AX,value2+2

mov res+2,AX

10-11. Команды вычитания

SUB <Операнд 1>, <Операнд 2>

SBB <Операнд 1>, <Операнд 2>

мл.байт ст.байт

Page 18: Системное программное обеспечение

18

Команды пересылки / преобразования данных (5)

12. Команда сравнения

СМP <Операнд 1> , <Операнд 2>

Примеры:

а) cmp AX,5

б) cmp byte ptr 0[BX],’A’

13-14. Команда добавления/вычитания единицы

INC <Операнд>

DEC <Операнд>

Примеры:

inc AX

dec byte ptr 8[BX,DI]

15. Команда изменения знака

NEG <Операнд>

Page 19: Системное программное обеспечение

19

Команды пересылки / преобразования данных (6)

16-17. Команды умножения

MUL <Операнд>

IМUL <Операнд>

mov AX,4

imul word ptr A

Page 20: Системное программное обеспечение

20

Команды пересылки / преобразования данных (7)

18-19. Команды «развертывания» чисел

CBW ; AL -> AX

CWD ; AX -> DX:AX

Page 21: Системное программное обеспечение

21

Команды пересылки / преобразования данных (8)

20-21. Команды деления

DIV <Операнд>

IDIV <Операнд>

mov AX,40

cwd

idiv word ptr A

Page 22: Системное программное обеспечение

22

Пример программирования выражения

X = (A+C)(B-1)/(C+8)

Сегмент данных:

A dw 25

B dw -6

C dw 11X 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

Page 23: Системное программное обеспечение

23

Команды передачи управления

1. Команда безусловного перехода

short

JMP near ptr <Символическое имя или адрес>

far ptr

Примеры:

а) jmp short Label1

б) cycle: …

jmp cycle

в) jmp BX

г) jmp dword ptr [BX]

Page 24: Системное программное обеспечение

24

Команды передачи управления (2)2. Команды условного перехода

<Команда> <Символическое имя или адрес>

Команды условного перехода:JZ – переход по "ноль";

JE – переход по "равно";

JNZ – переход по "не нуль";

JNE – переход по "не равно";

JL – переход по "меньше";

JNG, JLE – переход по "меньше или равно ";

JG – переход по "больше";

JNL, JGE – переход по "больше или равно ";

JA – переход по "выше" (беззнаковое “больше”);

JNA, JBE – переход по "не выше"(беззнаковое “не больше”);

JB – переход по "ниже" (беззнаковое “меньше”);

JNB, JAE – переход по "не ниже" (беззнаковое “не меньше”).

Page 25: Системное программное обеспечение

25

Условный переход на более чем 128 байт

jz zero jnz continue

jmp zero

continue: ...

Page 26: Системное программное обеспечение

26

Программирование ветвлений

cmp ...

j<условие> ELSE

<операции 1>

jmp COM

ELSE: <операции 2>

COM: <продолжение>

Page 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

Page 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

Page 29: Системное программное обеспечение

29

Пример. Определение НОД (2) mov ax,a mov bx,bcycl: cmp ax,bx je kon jl lit sub ax,bx jmp short comlit: sub bx,axcom: jmp cyclkon: mov c,ax retbegin endpcode ends end begin

Начало

ВводA, B

A=B

A>B

A:=A-B B:=B-A

ВыводA

Конец

нет

да

да нет

com kon

cycl

lit

Page 30: Системное программное обеспечение

30

Команды передачи управления (3)

3. Команды организации циклической обработки

1) Команда организации цикла

LOOP < Символическое имя или адрес>

Пример:

mov cx, loop_count

begin_loop: < Тело цикла>

loop begin_loop

Page 31: Системное программное обеспечение

31

Команды передачи управления (4)

2) Команда перехода по обнуленному счетчику

JCXZ <адрес перехода>

Пример:

mov cx, loop_count jcxz end_of_loop

begin_loop: < Тело цикла > … loop begin_loopend_of_loop: ...

Page 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: ...

Page 33: Системное программное обеспечение

33

Программирование циклической обработки

Определить сумму натуральных чисел 1..n.; сегмент данных

S dw 0

n dw 18

; сегмент кода

mov CX,n

mov AX,0

cycle: add AX,CX

loop cycle

mov S,AX

S=0

i=1,n

S=S+i

mov CX,n

mov AX,0

mov BX,1

cycle: add AX,BX

inc BX

loop cycle

mov S,AX

Page 34: Системное программное обеспечение

34

Программирование обработки массивов

A dw 4,6,-1,7,5

Вариант 1

mov AX,0

lea BX,A

mov CX,5

cycle:add AX,0[BX]

add BX,2

loop cycle

4 6 -1 7 5A

S=0

i=1,n

S=S+A[i]

Вариант 2

mov AX,0

mov BX,0

mov CX,5

cycle:add AX,A[BX]

add BX,2

loop cycle

4 6 -1 7 5A

DS

4 6 -1 7 5A

DS

BX BX

Page 35: Системное программное обеспечение

35

A db 2,3,1,-1,8db 6,-8,5,4,7db 8,6,3,1,6

mov BX,0mov CX,3

cycle1: push CXmov CX,5

cycle2: ... A[BX]inc BXloop cycle2pop CXloop cycle1

Программирование обработки матрицA db 2,3,1,-1,8

db 6,-8,5,4,7db 8,6,3,1,6

mov BX,0mov CX,3

cycle1: push CXmov CX,5

cycle2: ... A[BX]inc BXloop cycle2pop CXloop cycle1

2 3 -1 -1 8A

6 -8 5 4 78 6 -3 1 6

2 3 -1 -1 8A

6 -8 5 4 7 8 6 -3 1 6

DS

BX mov DI,0mov CX,5

cycle1: push CXmov CX,3mov BX,0

cycle2: ... A[BX,DI]add BX,5loop cycle2pop CXinc DIloop cycle1

DI

Page 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

Page 37: Системное программное обеспечение

37

Пример (2) mov cx,n mov bx,0 mov di,bx mov si,bxagain: cmp x[bx],0 jle less_or_eq inc di jmp short nextless_or_eq: jl next inc sinext: 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

Конец

<0

Page 38: Системное программное обеспечение

38

Команды передачи управления (6)

4) Команды вызова подпрограмм

а) Команда вызова процедуры

CALL <Символическое имя или адрес >

б) Команда возврата управления

RET [<Целое>]

Текст процедуры должен быть оформлен в виде:

<Имя процедуры> ргос < Описатель удаленности>

<Тело процедуры>

<Имя процедуры> endp

Page 39: Системное программное обеспечение

39

Организация передачи управления в процедуру

CALL <Имя>

<Имя> PROC

RET<Имя> ENDP

Основная программа Процедура

Адрес возврата

Стек

2 или 4 байта

Page 40: Системное программное обеспечение

40

Команды обработки строк

Элемент: байт или слово

Установка/сброс флага направления:

STD

CLD

DS:SI

ES:DI

Источник

Приемник

DF =0

DF =0

Page 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

Page 42: Системное программное обеспечение

42

Команды обработки строк (3)

4) Префиксная команда повторения

REP <команда>

Пример:

mov CX,10

lea SI, A

lea DI, B

rep movsb

Page 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

ES:DI

Page 44: Системное программное обеспечение

44

Команды обработки строк (5)

7) Префиксные команды "повторять, пока равно" и "повторять, пока не равно"

REPE < Команда >

REPNE < Команда >

Пример:

mov CX,10

lea SI, A

lea DI, B

repe cmpsb

Page 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

Page 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

Page 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_FoundFound: mov byte ptr Flag,BLnot_Found: retbegin endpcode ends end begin

Page 48: Системное программное обеспечение

48

Команды манипулирования битами 1. Логические команды

NOT <Операнд> ; логическое НЕ;

AND <Операнд 1>, <Операнд 2> ;логическое И;

OR <Операнд 1>, <Операнд 2> ;логическое ИЛИ;

XOR <Операнд 1>, <Операнд 2> ;исключающее ИЛИ;

TEST <Операнд 1>, <Операнд 2> ; И без записи результата

Пример. Выделить из числа в AL первый бит:

and al, 10000000B

10110001

10000000

10000000

Page 49: Системное программное обеспечение

49

Команды манипулирования битами (2)

2. Команды сдвига

<Код операции> <Операнд>, СL или 1

Команды:

SAL – сдвиг влево арифметический;

SHL – сдвиг влево логический;

SAR – сдвиг вправо арифметический;

SHR – сдвиг вправо логический;

ROL – сдвиг влево циклический;

ROR – сдвиг вправо циклический;

RCL – сдвиг циклический влево с флагом переноса;

RCR – сдвиг циклический вправо с флагом переноса

CF 0

CF 0

CF

0CF

CF

CF

Page 50: Системное программное обеспечение

50

Команды манипулирования битами (3)

Пример. Умножить число в AX на 10:

mov bx, ax

shl ax, 1

shl ax, 1

add ax, bx

shl ax, 1

Page 51: Системное программное обеспечение

51

Управление вводом/выводом

IN AL или AX, <Порт> или DX

OUT <Порт> или DX, AL или AX

Пример:

in AL, 60H

out 60H, AL

МППорты

Устройствов/в

ОП

Интерфейс

Шина

Упр.шиной

Инт-с

Генераторсинхронизации