Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

Информатика, программирование
Профессиональная деятельность по специальности Прикладная информатика (в экономике) предполагает как создание, внедрение, анализ, сопровождение и эксп...полностью>>
Информатика, программирование
В настоящее время приемом оплаты за коммунальные услуги занимаются предприятия, аналогичные МУП «ГЕРЦ» г.Махачкалы. Все эти предприятия широко распрос...полностью>>
Информатика, программирование
Найти общую площадь этих колец. Написать программу решения следующей задачи: Вычислить и запомнить суммы положительных элементов каждой строки матриц ...полностью>>
Информатика, программирование
информационное — документы, содержащие описания стандартных проектных процедур, типовых проектных решений, типовых элементов, комплектующих изделий, м...полностью>>

Главная

Сохрани ссылку в одной из сетей:

Загальні відомості про робочі столи користувача в Linux

Робочий стіл – це графічний інтерфейс користувача з операційною системою. Робочий стіл дозволяє:

  • переглядати в графічному режимі файлову систему і виконувати всі операції над файлами (копіювання, перейменування, вилучення тощо);

  • розміщувати ярлики файлів і каталогів (папок) для швидкого доступу до них;

  • розміщувати ярлики змінних дисків для їх монтування та доступу до їх вмісту;

  • розміщувати ярлики принтерів для прискорення початку друку;

  • зіставляти програми з файлами певного типу для їх автоматичного запуску.

Як правило, робочий стіл містить панель задач, на якій розташовуються кнопки ярликів, меню, програм і аплетів. Аплет – це невеличка вбудована програма для роботи і контролю за станом системи (наприклад: годинник, калькулятор і т.д.). Зазвичай панель задач реалізована у вигляді рядка в нижній частині екрана, хоча в більшості випадків передбачена можливість її переміщення до будь-якої сторони екрана.

Характерною особливістю робочих столів в Linux, яка відсутня у Windows, є можливість працювати з багатьма віртуальними робочими столами. На кожному із них може розташовуватись свій набір ярликів та відкритих вікон працюючих програм. Кожен віртуальний робочий стіл може мати свою гаму кольорів і рисунків, тобто ці столи функціонують незалежно один від одного.

З точки зору ОС робочий стіл - це набір Х-клієнтів та бібліотек для створення графічного інтерфейсу користувача із системою. Серед Х-клієнтів найважливішими є менеджери дисплеїв та менеджери вікон. Кожний робочий стіл має свій конкретний менеджер дисплея та конкретний менеджер вікна, тобто вони орієнтовані тільки на свій робочий стіл.

СКБД

Основні виробники систем керування базами даних вже перенесли свої продукти на Linux: існують Linux версії IBM DB2, Informix, Oracle, Sybase, Corel/Inprise Interbase та ін. Linux може використовуватися в якості платформи для запуску системи керування підприємством SAP R/3.

Засоби підготування текстів

У дистрибутивах Linux звичайно поставляється TeTeX реалізація TeX - системи верстки текстів топографічної якості, створеної американським математиком і програмістом Дональдом Кнутом. Система TeX та макропакет високого рівня LaTeX сьогодні використовуються для публікації наукових статей, часописів і книг.

SGML Tools: засоби трансформації структурованого по правилах SGML тексту в LaTeX, HTML, GNU info, LyX, RTF, plain text і інші формати з одного вихідного тексту, орієнтовані на створення технічної документації.

Офісні пакети

Крім декількох проектів по створенню вільно розповсюджуваного комплекту офісних додатків для X'ів, під Linux існують комерційні офіси SUN Staroffice (сьогодні абсолютно безкоштовний для будь-якого застосування), Corel WordPerfect, Applix Applixware та деякі інші.

Завдання 1.

Написати shell сценарій, який, використовуючи графічні можливості shell, виконував висновок  інформації про користувача (ПІБ, група), введення  рядка символів і обробку рядки:

Задано текст, в якому слова відокремлені один від одного пробілами. Якщо перший символ тексту (тобто початок першого слова в тексті) буква, то необхіднопідрахувати кількість слів у тексті, що починаються з цієї букви, якщо першийсимвол тексту - цифра,  то знайти слово, порядковий номер якого дорівнюєзначенню цієї цифри, в інших випадках видати відповідні повідомлення.

Алгоритм вирішення завдання:

  1. Оприділити, являється символ числом.

  2. Порахувати слова в тексті, начинаючи з символа .

  3. Шукає слово в тексті під номером, починаючи з одиниці.

  4. Взяти перший символ текста.

  5. Якщо символ - буква, то порахувати слова і вивести результат на екран.

  6. Якщо символ - цифра, то знайти слово з цим номером і вивести результат на екран.

  7. Якщо символ - не буква чи цифра, то вивести на екран відповідне повідомлення.

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

#!/bin/bash

# дано текст, в якому слова відокремлені одне від одного пробілами

# якщо перший символ текста - буква, то необхідно підрахувати

# кількість слов в тексті, начинающихся з цеї букви

# якщо перший символ текста - цифра, то найти слово,

# порядковий номер которого дорівнює значенню цеї цифри

# в остальних випадках виводить відповідне повідомлення

# оприділити, являється символ буквой

# isalpha(c) -> true/false

isalpha()

{

echo "$1" | grep -q "^[[:alpha:]]$"

return $?

}

# оприділити, являється символ цифрой

# isdigit(c) -> true/false

isdigit()

{

echo "$1" | grep -q "^[[:digit:]]$"

return $?

}

# підрахувати слова в тексті, начинающих з символа

# count_words(text, c)

count_words()

{

echo "$1" | sed -r "s/ +/\n/g; /^\n$/d" \

| grep "^$2.*" \

| wc -l

}

# шукає слово в тексте під номером, починаючи з одиниці

# search_word(text, n)

search_word()

{

echo "$1" | sed -r "s/ +/\n/g; /^\n$/d" \

| sed -n "$2{p;q}"

}

# текст можна змінювати чи брати з іншого джерела

text="3abc abc a defg abc defg"

# взяти перший символ текста

fchar="${text:0:1}"

if isalpha "$fchar"; then

# якщо символ - буква, то порахувати слова

# і вивести результат на екран

#echo "letter"

count_words "$text" "$fchar"

elif isdigit "$fchar"; then

# якщо символ - цифра, то знайти слово з цим номером номером

# і вивести результат на екран

#echo "digit"

search_word "$text" "$fchar"

else

# якщо символ - не буква чи цифра,

# то вивести на екран повідомлення

echo "unknown"

# вийти з помилкою

exit 1

fi

# вийти з успіхом

exit 0

Операційна система Windows.

Системне програмування в MASM.

Флаговий регістр

Цей pегістр містить 16 біт прапорів, що керуються різними командами для індикації стану операції. В усіх випадках прапори зберігають своє значення доти, поки інша команда не змінить його. Флаговий регістр містить наступні дев'ять використовуваних біт (зірочками відзначені невикористовувані біти):

Номер біта: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Прапор: * * * * O D I T S Z * A * P * C

Розглянемо ці прапори в послідовності праворуч ліворуч.

CF (Carry Flag) - прапор переносу. Містить значення "переносів" (0 чи 1) зі старшого розряду при арифметичес ких операціях і деяких операціях зрушення і циклічного зрушення.

PF (Parity Flag) - прапор парності. Перевіряє молодші вісім біт результат- тов операцій над даними. Непарне число біт приводить до установки цього прапора в 0, а парне - у 1. Не варто плутати прапор парності з бітом контро- лю на парність.

AF (Auxiliary Carry Flag) - додатковий прапор переносу. Встановлюється в 1, якщо арифметична операція приводить до переносу четвертого праворуч біта (біт номер 3) у регистро виття однобайтовой команді. Даний прапор має відношення до арифметичних операцій над символами коду ASCII і до десяткових упакованим полям.

ZF (Zero Flag) - прапор нуля. Встановлюється в якості результату aрифметичних команд і команд порівняння. Як це не дивно, ненульовий результат приводить до установки нульового значення цього прапора, а нульовий - до установки одиничного значення. Існуюча невідповідність є, однак, логічно правильною, тому що 0 позначає "ні" (т.е. результат не дорівнює нулю), а одиниця позначає "так" (т.е. результат дорівнює нулю). Команди умовного переходу JE і JZ перевіряють цей прапор. SF (SIgn Flag) - знаковий прапор. Встановлюється у відповідності зі знаком результату (старшого біта) після арифметичних опеpацій: позитивний результат установлює 0, а негативний - 1. Команди умовного переходу JG і JL перевіряють цей прапор.

TF (Trap Flag) - прапор покрокового виконання. Цей прапор вам уже прихо- дилося встановлювати, коли використовувалася до манда Т в отладчике DEBUG. Якщо цей прапор встановлений в единичное cостояние, те процесор переходить у режим покрокового виконання команд, тобто в кожен момент виконується одна команда під користувальницьким керуванням.

IF (Interrupt Flag) - прапор переривання. При нульовому складаючись нии цього прапора переривання заборонені, при одиничному - дозволені.

DF (DIrection Flag) - прапор напрямку. Використовується в строкових опера- ціях для визначення напрямку передачі даних. При нульовому стані команда збільшує вміст регістрів SI і DI, викликаючи передачу даних ліворуч праворуч, при нульовому - зменшує вміст цих регістрів, викликаючи передачу даних праворуч ліворуч (див. гл.11).

OF (Overflow Flag) - прапор переповнення. Фіксує арифметическое переповнення, тобто перенос в/из старшого (знакового) біта при знакових арифметичних операціях. Як приклад: команда CMP порівнює два операнда

і воздействуте на прапори AF, CF, OF, PF, SF, ZF. Однак, немає необхідності перевіряти всі ці прапори по окремості. У сле- прикладі, що дує, перевіряється чи містить регістр BX нульове значення:

CMP BX,00 ;Порівняння BX з нулем

JZ B50; Перехід на B50 якщо нуль. (дії при ненулі)

B50: ... ;Крапка переходу при BX=0

Якщо BX містить нульове значення, команда CMP установлює прапор нуля ZF в одиничний стан, і можливо змінює (чи немає) інші прапори. Команда JZ (перехлд якщо нуль) перевіряє тільки прапор ZF. При одиничному значенні ZF, що позначає нульова ознака, команда передає керування на адресу, зазначений у її операнде, тобто на мітку B50.

Команда порівняння

Команда порівняння CMP порівнює два числа, віднімаючи одне з іншого. Вона не записує результат, але прапори стану установлює відповідно до результату. Ця команда змінює тільки прапори. У програмі команда порівняння використовується так само, як і команда вирахування; однак команди порівняння з заемом не існує. Порівняння з підвищеною точністю вимагає ледве більше зусиль, чим порівняння чи байтів слів. Фактично в цих випадках багато простіше використовувати команду вирахування замість команди порівняння. На рис.П4.11 показане порівняння пари 32=бітових чисел у пам'яті з використанням регістра AX у якості області тимчасового збереження. Це порівняння визначає, яке з чисел більше. Програма в результаті свого виконання встановлює коди умови. Прапор переносу визначає, яке з чисел більше: якщо прапор дорівнює 1, число VALUE більше.

Програма перевіряє два 32=бітових числа на рівність. Програма зберігає молодший результат, а потім комбінує його зі старшим, і в такий спосіб з'ясовує еквівалентність результату нулю. Команда OR описана в наступному розділі, а тут істотно те, що вона комбінує два значення так, що остаточне значення дорівнює 0 тоді і тільки тоді, коли обоє вихідних значення рівні 0. Результат цієї підпрограми порівняння - значення прапора нуля; якщо він дорівнює 1, числа рівні.

Завдання 2.

В MASM написати програму вирішення задачи.

Створити EXE та COM модулі.

Дані цілі числа a1, …, an. Отримати послідовність b1, …, bn, яка відрізняється відa1, …, an тим, що всі парні члени даної послідовності в ній удвоєні.

Алгоритм вирішення завдання:

  1. Зрівнюємо перший елемент з наступними.

    1. Якщо є співпадання, то множимо його на 2.

    2. Зрівнюємо наступний елемент.

    3. Перевіряємо чи не пройдені всі елементи масива.

  2. Вивод на екран елементи, які перемножувалися на 2.

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

assume cs:code, ds:data

code segment

begin: mov ax,data

mov ds,ax

mov bl,2 ;будемо ділити на 2

mov si,0 ;обнуляємо регістри

xor ax,ax ;

mov di,0 ;

l:

mov al,mas1[si] ;заносимо si-й елемент

div bl ;ділимо його на 2

cmp ah,0 ;перевіряємо залишок(вона знаходиться в ah)

je nekv ;якщо залишок дорівнює 0, то переходим до

;наступного елементу

mov al,mas1[si] ;по іншому перемножуємо елемент на 2 та

;заносим його до масиву

mul bl

mov mas2[si],al

jmp l2 ;переходим на l2

nekv:

mov al,mas1[si] ;заносим елемент масива в регістр

mov mas2[si],al

l2: inc si ;переходимо до наступного елементу

cmp si,len ;робимо перевірку, якщо прошли всі елементи тоді

;переходимо на вихід

je fin ;

xor ax,ax ;по іному переходимо до наступного елементу

jmp l ;

fin:

;вивід масиву на екран

mov al,mas2[di]

mov y,al

mov ah,09h

mov dx,offset y

int 21h

inc di

code ends

data segment

sum db 0

len dw 10

mas1 db 11,4,25,5,6,10,15,12,9,80

mas2 db 12 dup(?)

y db " $"

err db "err$"

msg db ?

data ends

stk segment stack

db 256 dup()

stk ends

end begin

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

.model tiny

.org 100h

code segment

begin: ; mov ax,data

; mov ds,ax

mov bl,2

mov SI,0

xor ax,ax

mov di,0

l:

mov al,mas1[SI]

div bl ;делим его на 2

cmp ah,0

je nekv

mov al,mas1[SI]

mul bl

mov mas2[SI],al

jmp l2

nekv:

mov al,mas1[SI]

mov mas2[SI],al

l2: inc SI

cmp SI,len

je fin

xor ax,ax

jmp l

fin:

mov al,mas2[Di]

mov y,al

mov ah,09h

mov dx,offset y

int 21h

inc di

cmp di,len

jne fin

exit:

mov ah,4ch

int 21h

sum db 0

len dw 10

mas1 db 11,4,25,5,6,10,15,12,9,80

mas2 db 12 dup(?)

y db " $"

err db "err$"

msg db ?

code ends

;data segment

;data ends

;stk segment stack

; db 256 dup()

;stk ends

end begin

Завдання 3.

1. В MASM32 написать програму вирішення задачи.

2. Ввід-вивід реалізувати з використанням функції API.

Побудувати вектор H, елементи якого дорівнюють різниці елементів головної та побічної діагоналей матриці Q (k, k).

Алгоритм вирішення завдання:

  1. Беремо матрицю (задана програмно).

  2. Шукаємо головну діагональ.

  3. Віднімаємо від головної діагоналі побічну.

  4. Виводимо отриманий результат вектора у повідомленні.

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

.386

.model flat, stdcall

option casemap :none ; case sensitive

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\user32.lib

.data

N equ 4

; матриця задана програмно

Q dd 4, 3, 2, 1

dd 3, 2, 1, 4

dd 2, 1, 4, 3

dd 1, 4, 3, 2

result_vector dd N dup(0)

fmt db "%d", 0

_title db "result vector: ", 0

temp db 10 dup(?)

res db 40 dup (0)

.code

start:

; беремо головну діагональ

lea esi, Q

lea edi, result_vector

mov ecx, N

@@:

movsd

add esi, N*4

loop @b

; віднімаємо побічну діагональ

lea esi, Q+(N-1)*4

lea edi, result_vector

mov ecx, N

@@:

lodsd

sub [edi], eax

add edi, 4

add esi, (N-2)*4

loop @b

; виводим результат в MessageBox:

mov ecx, N

lea esi, result_vector

@@:

push ecx

lodsd

invoke wsprintf, addr temp, addr fmt, eax

lea edi, temp

invoke lstrlen, edi

mov byte ptr [edi+eax], ' '

invoke lstrcat, addr res, addr temp

pop ecx

loop @b

invoke MessageBox, 0, addr res, addr _title, MB_OK

invoke ExitProcess, 0

end start

Список використаної літератури

1. Глушаков С.В., Сурядний О.С. Linux для дома и офиса: Учебный курс. - Харьков: Фолио, 2002. – 389 с.

2. Пильщиков В. Н. Программирование на языке ассемблера IBM PC. – М.: Диалог-Мифи, 1999. – 286 с.

3. Скловська С. Команди Linux: Довідник. - К.: “ДиаСофт”, 2001. - 688 с.

4. Скловська С. Red Hat Linux 6.0 – Підручник. К.: “ДиаСофтЮП”, 1999. - 416 с.

  1. Топхем Д., Чионг Х.В. Юнікс и Ксенікс. - М.: Мир, 1988. - 392 с.

  2. Юров В. Assembler. – Санкт-Петербург: Питер, 2001. – 622 с.



Похожие страницы: