Засоби консольного введення/виведення та способи адресації в мові Асемблера
Вивчення програмування мовою асемблера, особливості якого включають використання імен в якості числових або інших констант. Де кожна мінлива повинна мати деяке унікальне ім'я, за допомогою якого задається її адресу з англійських слів у пам'яті.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | украинский |
Дата добавления | 26.04.2010 |
Размер файла | 25,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Міністерство освіти і науки України
Чернівецький національний університет імені Юрія Федьковича
Факультет комп'ютерних наук
Реферат
Засоби консольного введення/виведення та способи адресації в мові Асемблера
2010
Операційна система DOS реалізує концепцію “все є файлом”, згідно з якою всі посимвольні пристрої (консоль, принтер, паралельний порт і т. ін.) трактуються як файли і введення/виведення на ці пристрої реалізується цілком аналогічно введення/виведення дискових файлів. При цьому за посимвольними пристроями зарезервовано визначені стандартні імена файлів, які збігаються з іменами системних або зовнішніх драйверів цих пристроїв (не плутати з іменами файлів драйверів!). Використовувати ці імена в якості імен звичайних дискових файлів заборонено. Ці “файли” завжди відкриті й доступні в системі, їм призначено наперед визначені стандартні дескриптори. Так, за консоллю закріплено ім'я файлу пристрою CON і три стандартних дескриптори: 0 - для введення (клавіатура), 1 - для виведення (дисплей) і 2 - теж для виведення (дисплей). Дескриптори 1 і 2 відрізняються тим, що виведення з використанням дескриптора 1 можна перенаправляти, а виведення на дескриптор 2 - ні. Дескриптори 0, 1 і 2 часто називають відповідно дескрипторами стандартного введення, стандартного виведення і стандартної помилки. Вони відповідають файлам stdin, stdout i stderr (cin, cout i cerr) в C++ або input i output в Pascal.
Треба відзначити, що більшість засобів консольного введення/виведення у мовах високого рівня (наприклад, функції printf і scanf мови С++, процедури writeln і readln мови Pascal, оператори PRINT і INPUT мови BASIC і т. ін.) неявно використовують саме функції файлової системи DOS, а не більш спеціалізовані функції консолі, і тим більше не функції BIOS. Функції файлової системи DOS при зверненні до них із стандартними дескрипторами надають можливість перенаправлення введення/виведення у командному рядку. Точніше кажучи, така можливість надається не самими цими функціями, а драйвером консолі CON, до якої вони звертаються, але для програміста це несуттєво, якщо, звичайно, він не хоче “залізти” в DOS і замінити там якийсь код (для чого йому необхідно мати високу кваліфікацію системного програміста).
Інтерфейс файлової системи DOS є інтерфейсом консольного введення/виведення найвищого рівня, і програми, які його використовують, мають найбільш високий ступінь сумісності з будь-яким дисплеєм і клавіатурою, що підтримуються самою DOS (тобто з будь-яким ІВМ-сумісним комп'ютером). Але оскільки DOS працює тільки в текстовому режимі екрану і не має засобів керування кольором і атрибутами символів, що виводяться, то для розширення можливостей файлової системи DOS в цьому напрямку необхідно використовувати зовнішній (який входить до комплекту поставки DOS) драйвер консолі ANSI.SYS. Якщо для малювання картинок, управління кольорами та інших таких речей використовувати лише можливості ANSI.SYS, то гарантується високий рівень сумісності навіть для графічних програм (хоча і нижчий, ніж для працюючих у чорно-білому текстовому режимі). Але за такий високий рівень сумісності доводиться платити різким зниженням швидкодії програм при консольному введенні/виведенні засобами системи DOS, а також обмеженням можливостей введення/виведення.
Дещо швидше при більш низькому ступені сумісності працюють спеціалізовані функції консольного введення/виведення, що не спираються на концепцію пристрою як файл, але в кінцевому підсумку теж звертаються до драйвера консолі. Тому введення/виведення цих функцій теж можна перенаправлятися, і в ньому теж можна використовувати можливості драйвера ANSI.SYS. Ці функції доступні по перериванню DOS INT 21h, від 01h до 0Ch включно.
Але якщо програма має віконний інтерфейс, меню і тому подібне (наприклад, користується послугами бібліотеки Turbo Vision), то використання в ній виведення на екран засобами DOS дуже просто може зруйнувати весь її екран, тому в таких програмах для екранного виведення слід користуватися тільки засобами її інтерфейсної бібліотеки (навіть стандартні консольні функції введення/виведення типу printf використовувати не можна, оскільки вони спираються на функції DOS.
Ще швидше при меншій сумісності працюють функції екранного виведення відео-DIOS INT 10h і функції клавіатурного введення INT 16h. Крім підвищеної швидкодії, ці функції мають ту перевагу, що дозволяють максимально використовувати всі можливості клавіатури і відеосистеми. так, INT 16h, крім коду введеного символу, дозволяє отримати і його скан-код натиснутої клавіші, а аналогічні функції DOS INT 21h - ні. Функції ж відео-DIOS INT 10h дозволяють використовувати такі режими екрана, які не підтримуються драйвером ANSI.SYS, виводити на екран символи, що є керуючими для DOS, встановлювати кольори і атрибути, яких ANSI.SYS не підтримує. Але програма, яка використовує функції відео-DIOS INT 10h, стає жорстко прив'язаною до DIOS конкретної версії та конкретного виробника і, що найприємніше, до конкретного типу відеоадаптера та дисплея. Крім того, введення/виведення засобами DOS не можна перенаправляти, і при цьому методі недоступні можливості драйвера ANSI.SYS; якщо ж програма має віконний інтерфейс, меню і тому подібне (наприклад, користується послугами бібліотеки Turbo Vision), то використання в ній виведення на екран засобами DIOS може зруйнувати зображення на екрані.
Найбільш швидкодіючим із способів екранного виведення є пряме програмування відеоадаптера, тобто запис кодів символів, що виводяться, або пікселів безпосередньо у відеопам'ять, і установка опцій та режимів відеоадаптера через прямий запис в його порти (регістри). При такому способі виведення також з'являється можливість використовувати такі режими екрану, кольори і атрибути, які не підтримуються DSOS, а також виводити на екран символи, які DSOS інтерпретує як керуючі. Звичайно, ніяке перенаправлення введення при цьому не підтримується, драйвер ANSI.SYS недоступний. Цей метод досить часто застосовується в професійних прикладних та системних програмах, але він не схвалюється в зв'язку з тим, що використання прямого виведення на екран у програмах з віконним інтерфейсом може його зруйнувати.
Аналогічним чином можна і з клавіатурою працювати на найнижчому рівні, наприклад, читаючи скан-коди натиснення і відпускання безпосередньо з порта клавіатури або символи та їх скан-коди з клавіатурного буфера, або перехоплюючи апаратне переривання клавіатури INT 09h. Але така техніка практично не застосовується у прикладних програмах.
Вивід на екран в базовій версії DOS.
Вивід на екран в базовій версії DOS вимагає визначення текстового повідомлення в ділянці даних, установки в регістрі АН значення 09 (виклик функції DOS) і вказання команди DOS INT 21H. У процесі виконання операції кінець повідомлення визначається по обмежувачу $.
Наприклад:
NAME_KLI DB `Ім'я клієнта?`, `$`
mov ah, 09; запит виведення на екран
lea dx, NAME_KLS; завантаження адреси повідомлення
int 21h; виклик DOS
Знак $ можна кодувати безпосередньо після символьного рядка, всередині рядка к `Ім'я клієнта?`, `$` або в наступному операторі db `S`. Якщо знак долара буде відсутній в кінці рядка, то на екран будуть виводитися всі наступні символи, поки знак `S` не зустрінеться в пам'яті.
Більшість із 256 ASCІІ-кодів мають символьне представлення і можуть бути виведені на екран. Шістнадцяткові коди 00 і FF не мають символів і виводяться на екран у вигляді пропусків, хоча символ пропуску має ASCІІ-код 20h. Так як символ долара не виводиться на екран, коди від 08 h до 0dh є спеціальними керуючими символами, то це не призводить до переміщення курсору та до інших керуючих дій.
Введення даних з клавіатури в базовій версії DOS.
Ділянка введення вимагає наявності списку параметрів, який містить специфікацію полів, необхідних при виконанні команди INT. По-перше, повинна бути визначена максимальна довжина тексту. Це необхідно для попередження користувача звуковим сигналом, якщо набраний надто довгий текст; зайві символи не приймаються. По-друге, в списку параметрів повинно бути певне поле, куди команда повертає дійсну довжину введеного тексту в байтах. Наприклад:
NAMEPAR LABEL BYTE; список параметрів
MAXLEN DB 20; максимальна довжина
ACTLEN DB?; реальна довжина
NAMEFLD DB 20 DUP (` `); введені символи
Тут LABEL - це директива з атрибутом BYTE. Перший байт містить максимальну довжину даних, що вводяться. так як це однобайтове поле, то його максимальне значення FF або 255. Другий байт необхідний для занесення в нього дійсного числа введених символів. Третім байтом починається поле, яке буде містити введені символи. так як у списку параметрів директива LABEL не займає пам'яті, то NAMEPAR i MAXLEN вказують на одну й ту ж адресу.
Для запиту на введення необхідно помістити в регістр ah номер функції 10 (0ФН), завантажити адресу списку параметрів (NAMEPAR) в регістр dx і виконати INT 21H.
mov ah, 0ah; запит функції введення
lea dx, NAMEPAR; завантажити адресу списку параметрів
int 21h; викликати DOS
Команда INT чекає поки користувач не введе з клавіатури текст, перевіряючи при цьому, щоб кількість введених символів не перевищувала максимального значення вказаного в списку параметрів. Для позначення кінця введення користувач натискує клавішу RETURN. Код цієї клавіші ()D) також заноситься в поле введення (NAMEFLD). Зауважимо, що 0DH не має відображуваного символу. Наприклад, якщо користувач ввів ім'я BROWN (RETURN), то список. параметрів буде містити інформацію:
Десяткові і символьні |
20 |
5 |
В |
R |
O |
W |
N |
... |
|||||
Шістнадцяткові |
14 |
05 |
42 |
52 |
4F |
57 |
4E |
0D |
20 |
20 |
20 |
... |
У другий байт списку параметрів (ACTLEN) команда заносить довжину введеного імені - 05. Код RETURN знаходиться за адресою NAVEFLD+5. Так як максимальна довжина у 20 символів включає 0DH, то справжня довжина введеного тексту може бути лише 19 символів.
Директиви є командами для керування програмою асемблювання. Крім цього, з допомогою директив у отриманий файл програми можна включити деякі дані, з якими далі буде працювати програма.
Практично в будь-якій програмі завжди використовуються змінні. Тому необхідно обов'язково виділити місце для їх зберігання, причому в більшості випадків змінна повинна мати свою особисту ділянку в пам'яті, щоб її зміна не вплинула на зміну інших. Як правило, для зберігання змінних використовується спеціальний сегмент даних, який адресується вмістом сегментного регістру DS. Крім цього, при виділенні пам'яті для змінної можна явно вказати, чи буде її ініціалізовано деяким початковим значенням.
Кожна змінна в програмі повинна мати деяке унікальне ім'я, з допомогою якого задається її адреса в пам'яті. Для цього рекомендується використовувати англійські слова або словосполучення, які коротко характеризують зміст та призначення змінної.
При програмуванні мовою асемблера корисно буде використовувати імена в якості числових або інших констант. Для цього можна використовувати два псевдооператори (директиви) - EQU (EQUlate) та = (знак рівності). ці директиви потрібно застосовувати або на початку файлу, що описує текст програми, або в окремому файлі, який у подальшому включається до тексту програми з допомогою директиви include.
У мові Асемблера також можна описати змінні стандартних, вбудованих типів, що відповідають типам змінних мов програмування високого рівня. До них відносяться змінні розміром байт, слово, подвійне слово та деякі інші. Всі змінні описуються однаковим способом:
name type value1, value2, ...
У цьому описі name визначає ім'я змінної, type - її тип, а value - початкове значення. При заданні змінної можуть бути задані кілька початкових значень, розділених комами.
Основні директиви визначення змінних:
Тип змінної type |
Розмір змінної |
|
db |
1 байт |
|
dw |
2 байти |
|
dd |
4 байти |
|
df |
6 байтів |
|
dg |
8 байтів |
|
dt |
10 байтів |
Для того, щоб ефективно застосовувати команди мікропроцесора, спочатку детально розглянемо способи адресації, які можна застосовувати в командах.
Під адресацією даних у мові Асемблера розуміються способи описання відповідних адрес зберігання операндів, використовуваних у програмі. розрізняють такі основні способи опису операндів (і відповідні форми адресації.):
операнди-регістри;
безпосередні операнди;
операнди в пам'яті;
У двооперандній команді можливі такі поєднання операндів:
регістр-регістр;
регістр-пам'ять;
пам'ять-регістр;
безпосередній операнд-регістр;
безпосередній операнд-пам'ять.
Винятками тут є:
команди роботи з рядками, які можуть переміщувати дані з пам'яті в пам'ять;
команди роботи зі стеком, які можуть переміщувати дані з пам'яті в стек;
команди типу множення, які використовують ще й наявний операнд (крім вказаного в команді);
В якості регістрів можуть використовуватися:
32-розрядні регістри EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP,
16-розрядні регістри AX, BX, CX, DX, SI, DI, SP, BP
8-розрядні регістри AH, AL, BH, BL, CH, CL, DH, DL
сегментні регістри CS, DS, SS, ES, FS, GS
При адресації найчастіше використовується команда пересилки даних mov, яка має формат:
mov операнд_приймач, операнд_джерело
Дія команди: операнд_приймачу присвоюється значення операнд_джерела.
Треба пам'ятати, що в команді mov заборонені такі поєднання операндів:
комірка пам'яті - комірка пам'яті;
регістр сегмента - комірка пам'яті
регістр сегмента - регістр сегмента.
Крім того, регістр CS не може бути в ролі приймача.
Регістрова адресація: в якості операндів (як приймачів, так і джерел) можна використовувати внутрішні регістри мікропроцесора.
Безпосередня адресація: в якості операнда-джерела даних можна використовувати константу, безпосередньо записану в команді мікропроцесора. В якості таких даних можуть використовуватися байти, слова, подвійні слова, причому вважається, що ці зміни мають знак.
Адресація комірок пам'яті: крім регістрів і констант, у командах можна використовувати і комірки пам'яті. Природно, що вони можуть використовуватися і як джерело, і як приймач даних.
Точніше, в командах використовується виконавча адреса, яка визначає адресу початку області пам'яті. Довжина (розмірність) цієї ділянки визначається неявно, виходячи з рівномірності іншого операнда.
Виконавча адреса. Використовуються дві складові адреси - сегмент і зміщення. Якщо для адресації використовуються мітки або імена змінних, то відомо, в якому сегменті визначені ці змінні. При обчисленні адреси використовується адреса початку сегменту і зміщення мітки або змінної з даним іменем по відношенню до початку сегменту. Ця адреса і називається виконавчою адресою, вона обчислюється по-різному залежно від режиму адресації.
Пряма адресація. При ній в команді вказується те зміщення, яке відповідає початку розміщення в пам'яті відповідного операнда. Вона використовується в тих випадках, коли явно відома адреса операнда (наприклад, при робота з системними ділянками пам'яті). При цьому можна використовувати вираз, який складається з деякої змінної і константи, яка додається до відповідного зміщення імені змінної. Таким чином можна звертатися до полів складної змінної (наприклад, структури).
Непряма адресація. При ній зміщення відповідного операнда в сегменті міститься в одному з регістрів мікропроцесора. Отже, вміст регістра мікропроцесора в даний момент часу визначає виконавчу адресу того операнда, який буде використовуватися в команді. Це дозволяє легко організувати доступ до складних елементів даних, які використовуються в мовах програмування високого рівня (наприклад, для забезпечення послідовного доступу до масиву даних). В якості регістрів непрямої адресації для мікропроцесора І8086 і старших можна використовувати лише регістри BX, SI, DL, BP. Для перших трьох регістрів їх вміст є зміщенням по відношенню до сегменту даних; для регістра ВР при обчисленні адреси використовується сегмент стеку. Для мікропроцесора І80386 і старших можна використовувати всі розширені регістри даних та індекси.
Непряма адресація по базі. При її використанні до вмісту регістру можна додавати константу. В цьому випадку виконавча адреса обчислюється як сума вмісту відповідного регістру і цієї константи. Така адресація характерна для доступу до полів структури, початкова адреса якої знаходиться в регістрі, а зміщення відповідного поля задається константою, яка записується безпосередньо в команді. При стандартній адресації (І8086) в якості базових регістрів можуть використовуватися лише два - ВX i ВP. При використанні регістра ВХ по замовчуванню використовується сегмент даних (сегментний регістр DX), а для регістрів ВР - сегмент стеку (SS).
Пряма індексна адресація. По суті, вона є еквівалентною непрямій адресації по базі, оскільки правила одержання виконавчої адреси такі ж - до вмісту регістра додається деяка константа, що записана безпосередньо в команді, і одержана сума визначає зміщення операнда в пам'яті.
Адресація по базі з індексуванням. У мікропроцесорі І8086 можна використовувати комбінацію непрямої індексної адресації та адресації по базі. Виконавча адреса операнда визначається як сума трьох складових - вмісту двох регістрів та константи, що задається безпосередньо в команді. такий спосіб адресації підходить при забезпеченні доступу до полів структури у випадку, якщо з таких структур організовано масив - константа задає початок масиву, індексний регістр визначає номер елемента в масиві, а базовий регістр - зміщення поля всередині структури.
Непряма адресація з масштабуванням (для процесорів 80386 і старших). У цьому випадку вміст розширеного індексного регістра можна додатково домножити на масштабний множник - число 2, 4, 8. Такий підхід дозволяє спростити доступ до елементів масиву, розмір яких кратний множнику (наприклад, масиви, що складаються зі слів та подвійних слів).
Правила формування адреси при непрямій адресації.
Виконавчу адресу при використанні непрямої адресації для всіх мікропроцесорів сімейства 180х86 можна представити у вигляді:
ЕА = (регістр бази) + (індексний регістр) + константа
ЕА - виконавча (або ефективна) адреса;
регістр бази - один із двох регістрів ВХ і ВР;
індексний регістр - один із двох регістрів SI i DI;
константа - зміщення, що задається безпосередньо в команді.
Насамкінець приведемо основні з команд обміну даними:
xchg операнд_1, операнд_2 - обміняти вміст операнд_1 і операнд_2;
in акумулятор, номер_порта - введення в акумулятор з порта;
in номер_порта, акумулятор - виведення вмісту акумулятора в порт;
lea призначення, джерело - завантаження ефективної адреси;
lds призначення, джерело - завантаження указника в регістр ds;
les призначення, джерело - завантаження указника в регістр es;
lgs призначення, джерело - завантаження указника в регістр gs;
lfs призначення, джерело - завантаження указника в регістр fs;
lss призначення, джерело - завантаження указника в регістр ss;
xlat (адреса_таблиці_перекодування) - заміщення значення в регістрі аl байтом з таблиці, в пам'яті адреса якої вказана операндом адреса_таблиці_перекодування;
push - джерело - запис значення джерела на вершину стека;
pop призначення - запис значення з вершини стеку в місце, вказане операндом призначення;
pushf - зберігає регістр ознак у стеці;
popf - запис значень зі стеку в регістр ознак.
Приклад програми на мові Асемблера для виконання
лабораторної роботи №3
.data; визначення змінних
bldb1; байт
w1dw0; слово
dw1dd3; подвійне слово
ab3db1, 2, 3; масив з трьох байт
aw2dw10,20; масив з двох слів
adw4dd12,23,34,45; масив з чотирьох подвійних слів
.code; регістр адрес
; пересилка з регістра в регістр
movah, bh; 8-розрядні регістри
movdi, bx; 16-розрядні регістри
movds, dx; сегментні регістри
moveax, ebx; 32-розрядні регістри (для І803386;і старших)
movax, bl; розмірності не збігаються
; безпосередня адресація
movax, 2; запис числа 2, розширеного до слова, в регістрі ax
moveax, 2; запис числа 2, розширеного до подвійного слова, в
; регістр eax
movds, 6000h; помилка, в сегментний регістр записувати
; константи не можна
; регістрова і пряма адресація
; пересилка з регістра в пам'ять
movb1, dl; пересилка байта з регістра dl в комірку
;пам'яті з іменем bl
mov(b1), dL; запис, ідентичний попередньому
moves, wl; пересилка слова зі змінної з ім'ям wl в
;сегментний регістр es
movdwl, ecx; пересилка подвійного слова
; пряма і безпосередня адресація
movwl, 23h; запис числа 23h в змінну з ім'ям wl
; непряма адресація
mov(bx), al; пересилка байта з регістра al на адресу,
;визначену регістрами ds:bx
mov(si), ecx; пересилка подвійного слова із регістра
;ecx на адресу, визначену регістрами ds:si
movdx, (ebp) ; пересилка слова з комірки пам'яті, що
;визначена регістрами ss:ebp регістр dx
movdh, (ecx); пересилка байта з комірки пам'яті, що
;визначена регістрами ds ecx в регістр dh
; пряма адресація з індексуванням
movab3 (di), 0; нехай в регістрі dі знаходиться число 2
;тоді число 0 пересилається в 3-й байт масиву ab3
mov(ab3+di), 0; аналогічна операція
movsp, aw2 (ecx) ; нехай в регістрі ecx знаходиться число
;2, тоді друге слово з масиву aw2
;пересилається в регістр sp
movadw4 (eax*4), ecx ; припустимо, що в регістрі eax
;знаходиться число 2. Тоді вміст регістра ecx
;пересилається в 3-й елемент масиву
; непряма адресація по базі. Необхідно звернути увагу на явне визначення (кваліфікацію) типу даних, адреса яких використовується в команді.
; Це обов'язково треба робити, оскільки з команди неясно, що саме треба пересилати - байт, слово чи інший тип даних.
movbyte ptr (bx) +2, 12 ; нехай в регістр bx записано адресу початку
; масиву ab3. тоді число 12 записується в 3-й
;елемент масиву
movbyte ptr (bx +2), 12 ; аналогічна операція
movвyte ptr 2 (bx), 12 ; аналогічна операція
movdx, (eax+2) ; нехай в eax записано адресу початку масиву
; слів aw2. Тоді з допомогою цієї команди вміст
; другого елемента масиву пересилається в
; регістр dx
mov(ebp*4+2), esi ; ця команда пересилає вміст регістра esi в
; змінну, адреса якої визначається за формулою
; ea=ebp*4+2, причому ця змінна вважається
; розміщеною в стеку
; непряма адресація по базі з індексуванням
moval, (bp+si); пересилка байта з пам'яті в регістр al адреса
;визначається сумою вмісту регістрів bp та si
moval, (bp)+(si); аналогічна операція
mov word ptr (eax+esi), 4 ; запис числа 4 в змінну, розміщену в
;пам'яті за адресою, яка визначається сумою
; вмісту регістрів eax та
movebp, (ecx+edi*4) ; пересилка подвійного слова зі змінної в
; пам'яті, що розміщена за адресою, яка
;визначається сумою ; ecx+edi*4
movab3 (bx) (dx+2), ah ; пересилка вмісту регістру ah в байт пам'яті
; за адресою, що визначається сумою А3
;+bx+dx+2, де А3 - зміщення (виконавча
; адреса) масиву в сегменті даних ds
movab3 (bx+2) (dx), ah ; аналогічна операція
movab3 (bx+dx+2), ah ; аналогічна операція
end
СПИСОК ЛІТЕРАТУРИ
1. А.А.Кочетков. Turbo Assembler при разработке программ. - Киев: “Диалектика”, 1995. - 288 с.
2. Л.Скенлон. Персональные ЭВМ IBM PC и ХТ. Программирование на языке Ассемблера. - Москва: “Радио и связь”, 1989. - 336 с.
3. Д.Абель. Язык Ассемблера для IBM PC. - Москва, 1993. - 447 с.
4. В.А.Скляров. Программное и лингвистическое обеспечение персональных ЭВМ. - Минск: “Высшая школа”, 1992.
5. П.Нортон, Д.Соухэ. Язык Ассемблера для IBM PC. - Москва: “Компьютер”, 1993. - 352.
6. П.Нортон. Персональный компьютер фирмы IBM и операционная система MS DOS. - Москва: “Радио и связь”, 1992. - 416 с.
7. В.Юров, С.Хорошенко. Assembler. Учебный курс. - Санкт-Петербург: “Питер Ком”, 1999. - 665 с.
Подобные документы
Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Розробка системних програм мовою асемблера або мовою високого рівня з вставками цією мовою. Формати числових даних, виконання арифметичних операцій. Арифметичні команди над двійковими цілими, двійково-десятковими не упакованими та упакованими числами.
методичка [232,4 K], добавлен 11.01.2010Аналіз розроблення та програмування обчислювального процесу лінійної структури, налагодження програм. Вивчення правил запису констант, числових і символьних змінних, типів даних. Побудова алгоритму розв’язування завдання та креслення його блок-схеми.
реферат [2,1 M], добавлен 22.04.2012Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.
курсовая работа [102,5 K], добавлен 14.03.2013Вивчення структури програми на Паскалі. Значення функції для будь-якого введеного значення аргументу. Введення-виведення за допомогою операторів Readln і Writeln, визначення їх відмінності від операторів Read і Write. Лістинг і результати роботи програми.
лабораторная работа [217,4 K], добавлен 04.11.2014Огляд низькорівневих команд. Застосування мнемонічних позначень та макровизначень (макросів). Різниця між мовою асемблера та мовою машинних кодів. Асемблери для DOS, Microsoft Windows та GNU/Linux. Принцип роботи контролера клавіатури і його інтерфейс.
курсовая работа [30,0 K], добавлен 19.11.2010Стандартні розміри чисел при програмуванні на мові Асемблера. Робота з дробовими числами, використання математичного сопроцесора або його емулятора. Створення програми, яка б перетворювала ціле число в дробове і навпаки, а також функції [x], {x}, |X|.
курсовая работа [22,0 K], добавлен 12.08.2009Використання математичного сопроцесора або його емулятора при програмуванні на мові асемблера з використанням дробових чисел. Створення програми на мові ASM-86, яка реалізує функції [x], {x}, |X|. Алгоритм перетворення цілого числа в дійсне та навпаки.
курсовая работа [12,4 K], добавлен 08.08.2009Реалізація програми на мові асемблера для процесора i8086. Регістрова структура процесора. Використання сегментних регістрів для апаратної підтримки найпростішої моделі сегментованої пам'яті. Формування арифметичних прапорців. Система команд процесора.
контрольная работа [240,5 K], добавлен 27.02.2013Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.
курсовая работа [510,9 K], добавлен 14.03.2013