719

Проектування програмних засобів на мові Assembler та в інтерпретаторі Shell

Курсовая

Информатика, кибернетика и программирование

Системне програмування в shell інтерпретаторі. Операційна система Windows. Системне програмування в MASM. Операційна система Linux (Ubuntu). Засоби підготування текстів.

Украинкский

2013-01-06

106 KB

16 чел.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

«Київський національний університет технологій та дизайну»

Кафедра Інформаційних технологій проектування

КУРСОВА РОБОТА

з дисципліни: “Системне програмування та операційні системи ”

на тему: “Проектування програмних засобів на мові Assembler та в інтерпретаторі Shell”

         Виконав:

                                                                                                  студент гр. БІТск-11

         Муравський Д. А.

         Перевірив:

        доц. Голубєв Л. П.

                                               

 Київ 2012

Зміст

Операційна система Linux (Ubuntu ).

Системне програмування в shell інтерпретаторі …………………………….…3

Завдання 1…………………………………………………………..……………...8

Постановка задачі ………………………………………………… .. 10   

Алгоритм вирішення задачі …………….…………………………...10

            Код програми…………..……………………………..………….......11

Операційна система Windows. Системне програмування в MASM…………..13

Завдання 2……….………………………………………………………………..15

Постановка задачі ……………………………………………………15   

Алгоритм вирішення задачі …………….…………………………..15

            EXE модуль програми…………..…………………….……………..16

         COM модуль програми………..…..…………………….……………17

Завдання 3…………………………………………………………………………18

Постановка задачі ……………………………………………………18   

Алгоритм вирішення задачі …………….………………………….18

            Код програми………….……….…………..…………………….……18      Список використаної літератури……………………………………………….21

Операційна система Linux (Ubuntu ).

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

Linux - вільно розповсюджуване ядро Unix-подібної системи, написане Линусом Торвальдсом за допомогою великого числа добровольців по всій Мережі. Linux має усі властивості сучасної Unix-системи, включаючи дійсну багатозадачність, розвиту підсистему керування пам'яттю і мережеву підсистему. Ядро Linux, що поставляється разом із вільно розповсюджуваними прикладними і системними програмами утворить повно функціональну універсальну операційну систему. Велику частину базових системних компонентів Linux успадкував від проекту GNU, ціллю якого є створення вільної мікроядерной операційної системи з обличчям Unix. На сьогоднішній день існує множина різноманітних постачань Linux, дистрибутивів, що можна розділити на дистрибутиви загального призначення і спеціалізовані. До спеціалізованих дистрибутивів відносяться такі як Linux Router - урізане постачання Linux для створення дешевого маршрутизатора на базі старого PC та ін. Незважаючи на розходження в дистрибутивах загального призначення, усі вони утворять обличчя ОС Linux таким, яким їх знають більшість користувачів ОС. На відміну від ядра, дистрибутиви можуть містити комерційні компоненти і тому їхнє вільне поширення може бути обмежено. У такому випадку автори дистрибутивів роблять доступними усі вільні компоненти. Звичайно під словосполученням "ОС Linux" розуміють дистрибутиви Linux загального призначення.

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

ОС Linux перетворилась в операційну систему для бізнесу, освіти та індивідуального користування. Це багатозадачна, багатокористувацькою операційна система, тобто система, в якій одночасно можуть працювати декілька сотень користувачів і одночасно може бути запущено багато задач.

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

Оскільки Linux постійно розвивається, то вже існує багато версій ОС Linux.

1. RedHat Linux 5.1

2. Red Hat Linux release 5.2 (Apollo)

3. KSI Linux release 2.0 (Nostromo),

Як і ОС UNIX, операційна система Linux складається із чотирьох основних компонентів:

  •  ядро;
  •  shell;
  •  файлова система;
  •  утиліти.
  •  

Ключові риси LINUX.

  •  Багатозадачна операційна система, захищеного 32-х розрядного режиму, у її складі немає 16-ти розрядного коду, крім підпрограми завантаження.
  •  Передова 32[64 для Alpha] бітна підсистема віртуальної пам'яті.
  •  Відсутнє обмеження 640к. LINUX може виділити до 3Гб на процес, якщо у вас є досить віртуальної пам'яті.
  •  Система безпеки файлів і процесів користувача.
  •  Мережна система графічного інтерфейсу “X Windows”, що відповідає промисловому стандартові. Запуск додатків через мережу. Можливість роботи додатків з багатьох машин на вашій робочій станції одночасно.
  •  Загальні бібліотеки (“Shared libraries”) для підвищення ефективності використання пам'яті і дискового простору.
  •  Прозора програмна емуляція мат. співпроцесора для машин без такого.
  •  API стилю POSIX.1 з USL і BSD розширеннями. Перенос майже будь-якого коректно написаного Posix або Unix API додатка є тривіальною задачею.
  •  Убудована підтримка мережі TCP/IP включаючи обидва протоколи і стандартний набір інструментів BSD.
  •  Широкий спектр WWW інструментів.
  •  Клієнт і сервер NFS - стандартної мережної файлової системи Unix.
  •  SAMBA SMB сервер для LAN manager і клієнтів Windows for Workgroups.
  •  MARS_NWE сервер клону Netware для використання в мережах IPX.
  •  Netatalk Appletalk сервер для використання в мережах Appletalk.
  •  Клієнт і сервер SMTP (E-mail) включаючи підтримку MIME.

Програмне забезпечення для UUCP - протоколу старого стилю для ефективного збереження і маршрутизації мережної інформації

Огляд можливостей Linux

Переносимість

Велика частина ядра Linux написана на мові С, завдяки чому система достатньо легко переноситься на різноманітні апаратні архітектури. Сьогодні офіційне ядро Linux працює на платформі Intel (починаючи з i386), Compaq (ex. Digital) Alpha, Motorolla 68k, MIPS, PowerPC, Sparc, Sparc64, StrongArm, Intel Italium (IA-64). Крім того, існує багато портів Linux, що поширюються окремо від офіційного ядра. Ядро Linux здатне працювати на багатопроцесорних SMP системах, забезпечуючи ефективне використання всіх процесорів. Підтримка архітектури NUMA знаходиться в стадії розробки. Розробники Linux намагаються дотримувати стандартів POSIX і Open Group, забезпечуючи тим самим переносимість ПЗ з іншими Unix-платформами.

Мережева підсистема

TCP/IP зтік у Linux відповідає усім стандартам і в багатьох можливостях перевершує реалізацію TCP/IP в інших ОС. Підтримка TCP/IP містить у собі просунуту маршрутизацію (policy routing, Qo and Fair Quering), traffic shaping, пакетну фільтрацію (firewalling), multicasting, підтримку "прозорого" проксі, masquerading, тунелінг, aliasing та ін. Крім IPv4, у ядро Linux входить експериментальна підтримка IPv6. Підтримується більшість існуючих мережевих пристроїв: Ethernet адаптерів (10/100Mbit, 1000Mbit, радіо карт), SLIP/PPP, FDDI, HIPPI, Frame Relay, Token Ring, WAN адаптери та ін. Linux містить підсистеми підтримки AX. 25 і ISDN.

Файлова система

Основною файловою системою Linux є його власна ext2fs. Офіційне ядро містить підтримку більш ніж 20 різноманітних файлових систем, включаючи FAT (FAT/VFAT/FAT32), ISO9660 (CD - ROM), HPFS (OS/2), NTFS (Windows NT), Sys (SCO Unix та ін.), UFS (BSD та ін.). У стадії розробки знаходяться файлові системи: ext3fs (кореспондуюча версія ext2fs), RaiserFS (швидка кореспондуюча файлова система). SGI і IBM займаються розробкою підтримки своїх кореспондуючих файлових систем XFS (з Irix) і JFS (з AIX) відповідно.

Прикладне ПЗ

Засоби розробки додатків

Більшість засобів розробки для Linux сьогодні були створені в рамках проекту GNU. Вони містять у собі GCC - Gnu Compiler Colection - універсальний переносний компілятор, GDB - Gnu Debuger - відлагоджувач, GNU C Library та ін. Компілятор GCC створювався максимально переносним, завдяки чому він підтримує біля 100 різноманітних апаратних платформ. Мова опису платформи добре документована, завдяки чому перенос GCC на нову архітектуру не складає особливої проблеми. "Зверху" GCC являє собою компілятор мов С (KR C, ANSI C, C9x і власні розширення), C++ (ANSI C++, STL), Objective C, Fortran 77, Effiel. Останні версії GCC містять також компілятор мови Java у машинно залежні коди. Окремо від GCC поширюються компілятори Ada95 і Pascal, що використовують gcc для генерації коду. Для Linux також існують інтерпретатори Lisp, Scheme і інших Lisp-подібних мов, скриптових мов Perl, AWK, Shell, Sed та ін.
Існують засоби підтримки ведення проекту і контролю версій (CVS), група пакетів, що полегшують написання переносних програм: autoconf, automake, libtool та ін.; різноманітні IDE.
Компанія IBM перенесла на Linux своє середовище розробки Java додатків - IBM VisualAge for Java на Linux. Inprise (Borland) повідомила про свої плани переносу Delphi і C++ Builder.

ПЗ для серверів Internet/Intranet

Стандартно в постачання Linux входять: Apache - самим популярний у Internet http-сервер; Sendmail - програма передачі електронної пошти (Mail Transfer Agent), ftp, pop3/imap, news сервери, сервер доменових імен, uucp over tcpip, squid ( кешируючий http/ftp проксі), засоби динамічної маршрутизації та ін.

Файл сервер

Linux може служити файл сервером по протоколах NFS (як правило використовуваному тільки на Unix машинах), SMB (Netbios over TCP/IP, використовуваний на різноманітних Windows платформах), AppleShare і IPX (Novell).

Middleware

Існує декілька вільних реалізацій архітектури OMG CORBA.

Графічний інтерфейс

Linux використовує стандартну віконну систему X. У більшості дистрибутивів використовується вільно розповсюджувана реалізація X'ів XFree86. - підтримує (майже) усі популярні графічні адаптери на платформі Intel та деякі інші. Віконна система X побудована на клієнт-серверній архітектурі, у такий спосіб місце запуску додатка і місце його відображення можуть бути фізично рознесені по мережі. У останню (поки експериментальну) версію XFree86 - 4.0, входить підтримка OpenGL і апаратної 3D акселерації.

Засоби розробки під X, що входять у стандарт, подають тільки базовий API розробника. Як правило при розробці додатків використовують додаткові бібліотеки для побудови інтерфейсу. Набір інтегрованих базових додатків, побудованих на одній бібліотеці утворить графічне середовище користувача. Найбільше популярні графічні середовища сьогодні - Gnome (GNU Network Object Model Environment) і напівкомерційне середовище KDE.

Графічний інтерфейс користувача Linux

В Linux, як і в Unix, на одному комп’ютері є 7 умовних консолей (консоль – це сукупність “клавіатура + дисплей”). Після завантаження Linux користувач попадає в одну з консолей, а потім він може перемикатися між різними консолями і працювати в будь-якій з них. В перших шести консолях реалізований текстовий режим роботи, а в сьомій консолі працює Х-сервер. Для переходів із текстової консолі в будь-яку іншу консоль необхідно натиснути комбінацію клавіш <Alt> + <Fz> (де z=1,2,…,7), а для переходу з графічної консолі потрібно натиснути комбінацію клавіш <Ctrl> + <Alt> + <Fz>, де z=1,2,…,6.

Загальні відомості про робочі столи користувача в 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 с.


 

А также другие работы, которые могут Вас заинтересовать

53851. Виникнення українського козацтва. Запорозька Січ 1.2 MB
  Мета: навчальна ознайомити учнів із виникненням на українських землях козацтва й Запорозької Січі; сформувати уявлення учнів про запорозьких козаків як хоробрих вояківземлеробів; розвивальна розвивати вміння знаходити необхідну інформацію в історичних джерелах; створення атмосфери довіри і відкритості робота з різними аналізаторами; виховна формування позиції взаємодії; виховувати повагу до українських козаків захисників рідної землі. Тип уроку Комбінований Основні дати Кінець ХV століття – перші відомості про українських козаків у...
53852. МИ РОДУ КОЗАЦЬКОГО НАЩАДКИ 47 KB
  Гей долиноюгей широкою козаки йдуть Звучить пісня Ой на горі та й женці жнуть. До залу урочисто входять козаки двох куренів команд зі своїми прапорами. Показати хочем нині Як колись в Україні Веселились козаки Наші прадіди й діди. З незапамятних часів в Україні козаки славилися силою та спритністю.
53853. Математика. Теория вероятностей и математическая статистика 2.08 MB
  Вероятность наступления хотя бы одного события. Вероятность события А это число РА которое вводится для количественного описания степени объективной возможности наступления А. В первом случае вероятность каждого из элементарных исходов равна 1 6 а во втором 1 4. В общем случае если число всех элементарных исходов NW равно n то вероятность каждого из них 1 n.
53855. Фундаментальный и технический анализ 26 KB
  Фундаментальный анализ основывается на оценке эффективности деятельности предприятия-эмитента. Он предполагает изучение комплекса показателей финансового состояния предприятия; степени конкурентоспособности производимой продукции
53856. Риск и доходность активов 29.5 KB
  Все факторы риска можно разделить на две группы: объективные и субъективные. К объективным относятся факторы, не зависящие непосредственно от самой фирмы. В эту группу входят: инфляция, конкуренция, политические и экономические кризисы и т.д.
53857. Риск и доходность финансовых активов 30 KB
  Под риском понимают вероятность возникновения непредвиденных финансовых потерь (снижение прибыли, дохода и даже потеря капитала инвестора) вследствие наступления неблагоприятных обстоятельств.
53858. Методы финансирования деятельности компании, самофинансирование 27 KB
  В большинстве случаев выделяют следующие методы финансирования: самофинансирование, эмиссия акций (акционирование), финансирование за счет эмиссии долговых ценных бумаг, кредитное финансирование, бюджетное финансирование
53859. Простые методы оценки эффективности инвестиционных проектов 30.5 KB
  Под методом оценки эффективности инвестиционных проектов понимается система способов и приемов сопоставления связанных с проектом результатов и затрат. Применение метода позволяет сформировать количественный показатель