Автор: Пользователь скрыл имя, 25 Мая 2013 в 14:53, контрольная работа
1. Робота в операційній системі Linux. Програмування в оболонці shell.
2. Операційна система Windows. Системне програмування в MASM.
3. Операційна система Windows. Системне програмування в MASM32 з використанням функцій API.
Всі інші регістри не діляться на частині, тому зчитувати чи записувати їхній зміст (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 |
Умовно флаги розділяються на флаги умов і флаги станів. Флаги умов автоматично змінюються при виконанні команд і фіксують ті чи інші властивості їх результату, наприклад, було чи ні переповнення або результат рівний нулю. Флаги станів встановлюються програмою і визначають подальшу роботу процесора, наприклад, блокують переривання.
До флагів умов відносять:
До флагів станів відносять:
Завдання №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,
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
Информация о работе Системне програмування та операційні системи