Системне програмування та операційні системи

Автор: Пользователь скрыл имя, 25 Мая 2013 в 14:53, контрольная работа

Краткое описание

1. Робота в операційній системі Linux. Програмування в оболонці shell.
2. Операційна система Windows. Системне програмування в MASM.
3. Операційна система Windows. Системне програмування в MASM32 з використанням функцій API.

Файлы: 1 файл

Системне програмування та операційні системи.docx

— 43.78 Кб (Скачать)

Всі інші регістри не діляться на частині, тому зчитувати чи записувати їхній зміст (16 бітів) можна тільки повністю.

Сегментні регістри CS, DS, SS і ES не можуть бути операндами ніяких команд, окрім стекових команд і команд пересилання. Ці регістри використовуються тільки для сегментування адрес.

Лічильник команд IP завжди містить  адресу (зсув від початку програми) тієї команди, що повинна бути виконана наступною (початок програми зберігається в регістрі CS). Зміст регістра IP можна змінити тільки командами переходу.

Флаги

Процесор має спеціальний  регістр флагів. Флаг - це біт, що приймає значення "1", якщо деяку умову було виконано, і значення "0" у іншому випадку. Використовуються 9 флагів, кожному з них привласнена визначена назва. Усі вони зібрані в регістрі флагів, тобто кожен флаг - це один з розрядів регістра. Структура регістра флагів:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

x

x

x

x

OF

DF

IF

TF

SF

ZF

х

AF

x

PF

x

CF


 

Умовно флаги розділяються на флаги умов і флаги станів. Флаги умов автоматично змінюються при виконанні команд і фіксують ті чи інші властивості їх результату, наприклад, було чи ні переповнення або результат рівний нулю. Флаги станів встановлюються програмою і визначають подальшу роботу процесора, наприклад, блокують переривання.

До флагів умов відносять:

  • CF (carry flag) - флаг переносу. Приймає значення 1, якщо операція призвела до перенесення зі старшого біта результату. Старшим є 7-й, 15-й, 31-й біти в залежності від розмірності операнда. Це відбувається, наприклад, якщо при додаванні цілих чисел результат вийшов за межі розрядної сітки, чи якщо при відніманні чисел без знаку перше з них було менше за друге. У командах зрушення в CF заноситься біт, що вийшов за розрядну сітку;
  • OF (overflow flag) - флаг переповнення. Встановлюється в 1, якщо в результаті операції було виконано перенос у старший, знаковий біт (7-й, 15-й, чи 31-й). Встановлюється в 1, якщо відбувається позика з цих розрядів. Ця ознака необхідна для роботи з числами зі знаком;
  • ZF (zero flag) - флаг нуля. Дорівнює 1, якщо результат операції виявився рівним 0;
  • SF (sign flag) - флаг знаку. Встановлюється в 1, якщо в операції над знаковими числами було отримано від’ємний результат;
  • PF (parity flag) – флаг парності. Дорівнює 1, якщо результат чергової команди містить парну кількість двійкових одиниць. Враховується звичайно при операціях вводу-виводу;
  • AF (auxiliary carry flag) - флаг додаткового переносу. Фіксує особливості виконання операцій над двійково-десятковими числами.

До флагів станів відносять:

  • DF (direction flag) - флаг напрямку. Встановлює напрямок перегляду рядків у строкових командах: при DF=0 рядки проглядаються від початку до кінця, при DF=1 - у зворотному напрямку;
  • IF (interrupt flag) - флаг переривань. При IF=0 процесор перестає реагувати на переривання, що надходять до нього, при IF=1 блокування переривань знімається;
  • TF (trap flag) - флаг трасування. При TF=1 після виконання кожної команди процесор робить переривання (з номером 1), що використовується при налагодженні програми для її трасування (виконання по кроках).

 

 

 

 

 

Завдання №2:

4. Даны натуральное число n, целые числа a1, …, an (в последовательности могут быть повторяющиеся члены). Получить все числа, которые входят в последовательность по одному разу.

 

EXE модуль програми:

 

assume CS:code, DS:Data

code segment

begin:  mov ax,data

          mov  ds,ax

 

dec len   ;будем делить на 2

mov bx,0  ;обнуляем регистры

mov ax,0

mov si,-1 

 

ii: inc si

cmp si,len

ja fin

 

mov al,mas1[SI]

mov di,-1

 

jj: inc di

cmp di,len

ja k

 

cmp si,di

je jj

mov ah,mas1[di]

cmp ah,al

je ii

jmp jj

k: mov mas2[bx],al

inc bx

jmp ii 

 

 

fin: mov si,bx

dec si

mov di,-1

vyv: inc di

mov bl,10

xor ax,ax

mov al,mas2[di]

 

div bl

 

add al,48

add ah,48

mov bl,ah

 

mov y,al

     mov ah,09h

mov dx,offset y

int 21h

 

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

mov bl,0

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

 

cmp si,di

jne vyv

 

exit:

mov ah,4ch

        int 21h

code  ends

data segment

len dw 10 

mas1 db 2,44,11,5,15,3,12,11,44,90

mas2 db 20 dup (0)

y db " $"

data ends

stk segment stack

     db 256 dup()

stk ends

    end begin

 

 

 

 

COM модуль програми:

 

CODESG  SEGMENT PARA 'Code'

        ASSUME  CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

        ORG     100H            ;Начало в конце PSP

begin: jmp l1

len dw 10 

mas1 db 2,44,11,5,15,3,12,11,44,90

 mas2 db 20 dup (0)

 y db " $"

 

l1: dec len   ;будем делить на 2

mov bx,0  ;обнуляем регистры

mov ax,0

mov si,-1 

 

ii: inc si

cmp si,len

ja fin

 

mov al,mas1[SI]

mov di,-1

 

jj: inc di

cmp di,len

ja k

 

cmp si,di

je jj

mov ah,mas1[di]

cmp ah,al

je ii

jmp jj

k: mov mas2[bx],al

inc bx

jmp ii 

 

 

fin: mov si,bx

dec si

mov di,-1

vyv: inc di

mov bl,10

xor ax,ax

mov al,mas2[di]

 

div bl

 

add al,48

add ah,48

mov bl,ah

 

mov y,al

     mov ah,09h

mov dx,offset y

int 21h

 

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

mov bl,0

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

 

cmp si,di

jne vyv

 

exit:

mov ah,4ch

        int 21h

codesg ends

    end begin

 

 

 

 

 

 

 

 

Операційна система  Windows. Системне програмування в MASM32 з використанням функцій API.

Завдання №3:

23. В матрице С(n,n) удалить в каждом столбце минимальный элемент столбца.

 

Код програми:

assume CS:code, DS:Data

code segment

begin:  mov ax,data

        mov  ds,ax

 

mov bx,row 

mov ax,col 

mul bx 

sub ax,col 

mov dob,ax

 

mov bl,mas1

mov min,bl

mov cx,col

 

incCol:    ;цикл по колонкам

push cx

 

mov di,cx

dec di

mov cx,row

 

mov min,254

 

incRow:  ;цикл по рядкам

mov si,cx

dec si

mov bx,col

mov ax,si

mul bx

mov bx,ax

mov al,mas1[bx][di] ;в al заносим элемент масива

 

cmp min,al  ;сравниваем текущий элемент с минимальным

jb less   ;если минимальный меньше, то переход к след ел

mov min,al  ;иначе присваиваем в мин текущий ел.

mov ind,si  ; и сохраняем индекс мин элемента

 

less: loop incRow

mov si,ind

dec si

ii: inc si  ;цикл по том же столбцу,

cmp si,row ; где мы начиная с сохраненного индекса сдвигаем элементы по столбику

je jj

 

mov bx,col  

mov ax,si

mul bx

mov bx,ax

add bx,col

mov al,mas1[bx][di]

sub bx,col

mov mas1[bx][di],al

jmp ii

 

jj: pop cx

loop incCol

 

mov si,0

mov DI,0

dec col

fin: mov bl,10

xor ax,ax

mov al,mas1[DI]

div bl  ;делим число на 10

 

add al,48 ;добавляем к младшей части 48, чтобы на вывод шел символ числа

add ah,48 ;добавляем к старшей части 48

mov bl,ah

 

mov y,al ;выводим младшую часть

mov ah,09h

mov dx,offset y

int 21h

 

mov y,bl  ;выводим старшую часть

     mov ah,09h

mov dx,offset y

int 21h

 

mov bl,0 ;после каждого элемента выводим пробел

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

cmp si,col

jne s

 

mov bl,10 ;после каждых col элементов выводим перевод строки

mov y,bl

     mov ah,09h

mov dx,offset y

int 21h

mov si,-1

s: inc si

inc DI

cmp DI,dob

jne fin

 

mov ax,4c00h

int 21h

code  ends

data segment

 row dw 4

 col dw 5

 dob dw 1

 min db 0

 ind dw 0

 mas1 db 61,31,13,99,1

      db 11,22,6, 11,9

      db 8, 12,5,  9,5

      db 12, 3,12, 1,6

 

 y db " $"

 msg db ?

data ends

stk segment stack

     db 256 dup()

stk ends

    end begin

 

 


Информация о работе Системне програмування та операційні системи