Автор: Пользователь скрыл имя, 25 Мая 2013 в 14:53, контрольная работа
1. Робота в операційній системі Linux. Програмування в оболонці shell.
2. Операційна система Windows. Системне програмування в MASM.
3. Операційна система Windows. Системне програмування в MASM32 з використанням функцій API.
Зміст:
1. Робота в операційній системі Linux. Програмування в оболонці shell.
2. Операційна система Windows. Системне програмування в MASM.
3. Операційна система Windows. Системне програмування в MASM32 з використанням функцій API.
Робота в операційній системі Linux. Програмування в оболонці shell.
Найпростіші засоби SHELL
Командний мова shell (у перекладі - раковина, шкаралупа) фактично є мовою програмування дуже високого рівня. На цій мові користувач здійснює управління комп'ютером. Зазвичай, після входу в систему ви починаєте взаємодіяти з командною оболонкою. Ознакою того, що оболонка (shell) готова до прийому команд служить видається нею на екран промптер. У найпростішому випадку це один долар ("$").
shell - це одна з багатьох
команд UNIX. Тобто в набір команд
оболонки "shell" входить команда
"sh" - виклик інтерпретатора "shell".
Перший "shell" викликається автоматично
при вашому вході в систему
і видає на екран промтері.
Після цього ви можете
Так наприклад, якщо ви підготуєте
в редакторі файл "file_1":
echo Hello!
то це буде звичайний текстовий файл, що
містить команду "echo", яка при виконанні
видає все написане правіше від неї на
екран.
Оскільки UNIX - система
розрахована на багато
Стрижневим елементом мови shell
є команда.
Структура команд
Команди в shell зазвичай мають
наступний формат:
<Ім'я команди> <прапори> <аргумент
(и)>
Наприклад:
ls-ls / usr / bin
Де ls - ім'я команди видачі вмісту директорія,
-Ls - прапори ("-" - ознака прапорів,
l - довгий формат, s - об'ем файлів в блоках),
/ Usr / bin - директорій, для якого виконується
команда.
Ця команда видасть на екран у довгому
форматі вміст директорії / usr / bin, при цьому
додасть інформацію про розмір кожного
файлу в блоках.
На жаль, така структура команди витримується
далеко не завжди. Не завжди перед прапорами
ставиться мінус, не завжди прапори йдуть
одним словом. Є різноманітність і в поданні
аргументів. До числа команд, які мають
екзотичні формати, відносяться і такі
"ходові" команди, як сс - виклик компілятора
мови С, tar - робота з архівами, dd - копіювання
файлу з перетворенням, find - пошук файлів
і ряд інших.
Як правило, перше слово shell сприймає, як
команду. Тому в командному рядку
cat cat
перше слово буде розшифровано shell, як
команда (конкатенації), яка видасть на
екран файл з ім'ям "cat" (друге слово),
що знаходиться в поточному директорії.
Ім'я shell-змінної - послідовність, що розпочинається з букви, та вміщує цифри, знак підкреслювання.
Значення shell-змінної - рядок символів.
У shell всього два типи даних: рядок символів та текстовий файл.
Ім'я змінної аналогічно традиційному представленню про ідентифікатор, тобто ім'ям може бути послідовність букв, цифр та підкреслювань, розпочинається з букви або підкреслення.
Для присвоювання значення змінним може використовуватися оператор присвоювання "=".
var_1=13
var_2="OS Unix"
Змінна та її значення повинні бути записані без пробілів відносно символа "=".
Можливі й інші способи присвоювання значення shell-змінним. Так, наприклад: DAT=`date` приводить до того, що спочатку виконується команда "date" а результат її виконання, замість видачі на стандартний вихід, прописується у якості значення змінної, у даному випадку "DAT".
Можна надати значення змінної за допомогою команди "read", яка забезпечує прийом значення з клавіатури: read x.
Одна команда "read" може прочитати значення відразу для декількох змінних, по черзі. Якщо змінних більше, чим їх введено, то тим що залишилися змінним присвоюється порожній рядок, якщо введено більше, то зайві значення ігноруються.
Під час звернення до shell-змінної необхідно перед ім'ям ставити символ "\$", так відповідно команда echo $var_2; виведе на екран "OS Unix".
Як засоби екранування використовуються подвійні лапки (""), одинарні лапки (' ') та бек-слеш (\).
Можна в одному рядку записувати декілька присвоювань.
x=22 y=33 z=$x
A="$x" B='$x' C=\$x
D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z
Тоді
echo A = $A B = $B C = $C
echo D = $D E = $E F = $F
eval echo evaluated A = $A
eval echo evaluated B = $B
eval echo evaluated C = $C
виведуть на екран
A = 22 B = $x C = $x
D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22
evaluated A = 22
evaluated B = 22
evaluated C = 22
"eval" - команда, що виконує означення змінних в рядку, що є аргументом.
Бек-слеш не тільки екранує наступний за ним символ, що дозволяє використовувати спеціальні символи просто як символи, що представляють самих себе, він може екранувати сам себе. Цей символ також може створювати ефект продовження рядка. Ефект продовження командного рядка забезпечує також символ конвеєра - "|".
Як і в будь-якій мові програмування у тексті мовою shell можуть бути коментарі. Для цього використовується символ "#". Усе, що знаходиться в рядку лівіше від даного символу, сприймається інтерпретатором як коментар.
Як і в будь-якій процедурній мові програмування, в мові shell є оператори. Ряд операторів дозволяє керувати послідовністю виконання команд. У таких операторах часто необхідна перевірка умови, яка визначає напрямок продовження обчислень.
У загальному випадку оператор "if" має структуру:
if умова
then список
[elif умова
then список]
[else список]
fi
Оператор вибору "case" має структуру:
case рядок in
шаблон) список команд;;
шаблон) список команд;;
...
esac
"Рядок" (це може бути і один символ), що порівнюється із шаблоном. Потім "список команд" вибраного рядка.
Приклад:
echo -n " А какую оценку получил на экзамене?: "
read z
case $z in
5) echo Молодец ! ;;
4) echo Все равно молодец ! ;;
3) echo Все равно ! ;;
2) echo Все ! ;;
*) echo ! ;;
esac
Оператор циклу "for" має структуру:
for ім'я [in список значень]
do
список команд
done
де "for" - це службове слово, що визначає тип циклу, "do" та "done" - це службові слова, що виділяють тіло циклу. Фрагмент "in список значень" може бути відсутнім.
Оператор циклу "'while' має структуру:
while умова
do
список команд
done
де "while" - службове слово, що визначає тип циклу з істиною умовою. Список команд у тілі циклу повторюється до тих пір, доки зберігається істинність умови (доки умови не дорівнює 0) або цикл буде перерваний командами "break", "continue" або "exit".
Оператор циклу "until" має структуру:
until умова
do
список команд
done
де "until" - службове слово, що визначає тип циклу з хибною умовою. Список команд в тілі циклу повторюється стільки разів, скільки буде зберігатися хибність умови або цикл не буде перерваним спеціальними командами.
Відмінність від "while" полягає в тому, що умова циклу перевіряється на хибність, перевіряється після кожного виконання тіла циклу.
Пустий оператор має формат:
Нічого не робить. Повертає значення "0". Наприклад, в конструкції "while :" або ставить у початок командного файлу, щоб гарантувати, що файл не буде прийнятий за виконавчий для "csh".
Завдання №1:
27. Дан текст, каждый символ которого может быть малой буквой, большой буквой, цифрой или одним из знаков “+”, “-”, “*”. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков. Найти все такие группы букв, в которые буква “а” входит не менее 2-х раз.
Код програми:
#!/bin/bash
#1 #вивід інформації про
виконавця роботи та ввід
gdialog --title "Виконав" --msgbox "Башинський Олег БІТ-3-09"
gdialog --title "Вхідні дані" --inputbox "Введіть текст" 10 50 2> lab6text.txt
#ввід вхідних даних
if [ $? -ne 1 ];
#Рядок опрацьовується якщо ввід підтверджено («Ок»)
then
ptext=$(cat lab6text.txt)
#вхідний рядок
text=$ptext;
#його копія
n=${#ptext};
#кількість символів
i=0;
j=0;
m=0;
#2
while [ $i -le $n ];
#цикл по символах строки
do
k=${ptext:$i:1}
#вибір і-го символу в строці
case $k in
#перевірка чи належить символ до літер, і формування груп літер
1|2|2|3|4|5|6|7|8|9|0) grup=' '; m=$(($m+1));;
#якщо не літера, очищаємо буфер групи літер
"*"|"-"|"+") grup=' '; m=$(($m+1));;
?) grup=$grup$k; #якщо літера, добавляємо до буфера групи літер
ns[$m]=$grup; #зберігаємо в масив
esac
i=$(($i+1)) #переходимо до наступного символу строки
done
#3
for p in ${ns[*]}; #цикл по групах літер
do
j=0;
i=0;
ind='no';#індекатор
n=$((${#p} - 1));
#кількість символів групи
while [ $i -lt $n ];#цикл по символах групи
do
j=$(($i+1));
if [ ${p:$i:1} = 'a' ] && [ ${p:$j:1} = 'a' ] && [ $ind = 'no' ]
#перевірка чи є в групі "аа"
then
GrupAA=$GrupAA" "$p #якщо так, добавляємо до вихідних даних
ind='yes'
#"аа" присутні
fi
i=$(($i+1));
#переходио до наст. групи
done
ind='no' #в наст. груні ще невідомо чи є "аа"
done
#4 Виведення вхідного та зміненого тексту та набору спец. символів. Кінець алгоритму.
gdialog --title "Вихідні дані" --msgbox "Вхідний текст:$text\nВихідні дані:$GrupAA"
fi
gdialog --clear
#Кінець програми.
exit 0
Операційна система Windows. Системне програмування в MASM.
Регістри
Крім комірок оперативної пам'яті для короткочасного збереження даних використовуються регістри - комірки, що входять до складу процесора. Доступ до регістрів здійснюється значно швидше, ніж до комірок пам'яті, тому використання регістрів помітно зменшує час виконання програм. Крім того, у деяких випадках без регістрів узагалі неможливо обійтися.
Усі регістри мають розмір слова (16 бітів), за кожним з них закріплена визначена назва. За призначеням та способом використання регістри можна розбити на наступні групи:
Тлумачення цих назв:
Регістри загального призначення можна використовувати у всіх арифметичних і логічних командах. У той же час кожен з них має визначену спеціалізацію, тобто для деяких команд необхідні тільки визначені регістри. Наприклад, команди множення і ділення вимагають, щоб один з операндів знаходився в регістрі AX чи в регістрах AX і DX (у залежності від розміру операнду), а команди керування циклом використовують регістр CX як лічильник циклу. Регістри BX і BP зазвичай використовуються як базові регістри, а SI і DI - як індексні. Регістр SP як правило вказує на вершину стеку, апаратно підтримуваного ПК.
Регістри AX, BX, CX і DX конструктивно влаштовані так, що можна отримувати доступ до їх старшої і молодшої половин; можна сказати, що кожний з цих регістрів складається з двох регістрів, розмір яких один байт і що позначаються через AH, AL, BH, BL, CH, CL, DH, DL відповідно (H - high, старша; L - low, молодша). Таким чином, з кожним з цих регістрів можна працювати як з єдиним цілим, так і з його частинами. Наприклад, можна записати слово в AX, а потім зчитати тільки частину слова з регістра AH чи замінити тільки частину в регістрі AL і т.д. Така структура регістрів дозволяє використовувати їх для роботи і з числами так і із символами.
Информация о работе Системне програмування та операційні системи