47621 (Мова програмування Assembler), страница 5

2016-07-30СтудИзба

Описание файла

Документ из архива "Мова програмування Assembler", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47621"

Текст 5 страницы из документа "47621"

3. На шляхах, визначених змінної LIB команди DOS SET. За допомогою команди SET можуть бути задані кілька шляхів пошуку, які діляться крапкою з комою. Вид команди SET: SET LIB=.

Лекція 5 Основні поняття мови асемблера Х86

  1. Будова програми на мові Assembler

  2. Поняття "сегмент", "регістр", "підпрограмма"

  3. Граматичні конструкції, які відповідають цим поняттям

  4. Тип даних в асемблері. Поняття "байт", "півбайт", "слово", та інші

1. Будова програми на мові Assembler

ФОРМАТ КОДУВАННЯ

Основний формат кодування команд асемблера має наступний вигляд:

[мітка] команда [операнд(и)]

Мітка (якщо мається), команда й операнд (якщо мається) pозділяються принаймні одним пробілом або символом табуляції. Максимальна довжина рядка - 132 символи, однак, більшість бажають працювати з рядками в 80 символів (відповідно ширині екрана). Приклади кодування:

Мітка Команда Операнд

COUNT DB 1; Ім'я, команда, один операнд

MOV AX 0; Команда, два операнда

Мітки

Мітка в мові асемблера може містити наступні символи:

Букви: від A до Z і від a до z.

Цифри: від 0 до 9.

Спецсимволи: знак питання (?) крапка (.) (тільки перший символ) знак "комерційне эт" (@) підкреслення (-) долар ($).

Першим символом у мітці повинна бути буква спецсимвол. Асемблер не робить розходження між заголовними і рядковими буквами. Максимальна довжина - 31 символ. Приклади міток: COUNT, PAGE25, $E10. Рекомендується використовувати описові і значеневі мітки. Імена регістрів, наприклад, AX, DI чи AL є зарезервованими і використовуються тільки для вказівки відповідних регістрів. Наприклад, у команді ADD AX, BX асемблер "знає", що AX і BX відноситься до регістрів. Однак, у команді MOV REGSAVE,AX асемблер сприйме ім'я REGSAVE тільки в тому випадку, якщо воно буде визначено в сегменті даних. У додатку 3 приведений cписок усіх зарезервованих слів асемблера.

Команда

Мнемонічна команда вказує асемблеру яку дію повинен виконати даний оператор. У сегменті даних команда (чи директива) визначає поле, робочу oбласть чи константу. У сегменті коду команда визначає дію, наприклад, пересилання (MOV) чи додавання (ADD).

Операнд

Якщо команда назначає виконувану дію, то операнд визначає а) початкове значення даних або б) елементи, над якими виконується дія по команді. У наступному прикладі байт COUNTER визначений у сегменті даних і має нульове значення:

Мітка Команда Операнд

COUNTER DB 0;

Визначити байт (DB); з нульовим значенням.

Команда може мати один чи два операнда, або взагалі бути без операндів. Розглянемо наступні три приклади:

Команда Операнд Коментар

Немає операндів RET; Повернутися

Один операнд INC CX ;Збільшити CX

Два операнда ADD AX,12 ;Додати 12 до AX

Мітка, команда й операнд не обов'язково повинні починатися з якої-небудь визначеної позиції в рядку. Однак, рекомендується записувати їх у стовпчик для більш зручного читання програми. Для цього, наприклад, редактор DOS EDLIN забезпечує табуляцію через кожні вісім позицій.

2. Поняття "сегмент", "регістр", "підпрограмма"

Сегментом називається область, що починається на границі параграфа, тобто по будь-якій адресі, що поділяється на 16 без залишку. Хоча сегмент може розташовуватися в будь-якому місці пам'яті і мати розмір до 64 Кбайт, він вимагає стільки пам'яті, cкільки необхідно для виконання програми. Існує три головних сегменти:

1. Сегмент кодів. Сегмент кодів містить машинні команди, які будуть виконуватися. Звичайно перша виконувана команда знаходиться на початку цього сегмента і операційна система передає керування за адресою даного сегмента для виконання програми. Регістр сегмента кодів (CS) адресує даний сегмент.

2. Сегмент даних. Сегмент даних містить визначені дані, константи і робочі області, необхідні програмі. Регістр сегмента даних (DS) адресує даний сегмент.

3. Сегмент стека. Стік містить адреси повернення як для програми для повернення в операційну систему, так і для викликів підпрограм для повернення в головну програму.

Регістр сегмента стека (SS) адресує даний сегмент.

Ще один сегментний регістр - регістр додаткового сегмента (ES), призначений для спеціального використання. На pис.1.2 графічно представ- лені регістри SS, DS і CS.

Послідовність регістрів і сегментів на практиці може бути інша. Три сегментних регістри містять початкові адреси відповідних сегментів і кожен сегмент починається на границі параграфа. Усередині програми всі адреси пам'яті відносні до початку cегмента. Такі адреси називаються зсувом від початку сегмента. Двобайтовий зсув (16-бітний) може бути в межах від значення 0000 до значення FFFF або від 0 до 65535. Для звертання до будь-якої адреси в програмі, комп'ютер складає адреса в регістрі сегмента і зсуву. Наприклад, перший байт у сегменті кодів має зсув 0, другий байт - 01 і так далі до зсуву 65535. Як приклад адресації, допустимо, що регістр сегмента даних містить значення 045F і деяка команда звертається до комірки пам'яті усередині сегмента даних з зсувом 0032. Недивлячись на те, що регістр сегмента даних містить 045F, він вказує на адресу 045F0, тобто на границі параграфа. Дійсний aдрес пам'яті тому буде наступний:

Адреса в DS: 045F0

Зсув: 0032

Реальна адреса: 04622

Яким чином процесори 8086/8088 адресують пам'ять в один мільйон байт? У регістрі міститься 16 біт. Оскільки адреса сегмента завжди на границі параграфа, молодші чотири біти адреси pівні нулю. Тичина. FFF0 дозволяє адресувати до 65520 (плюс зсув) байт. Але фахівці вирішили, що нема рації мати місце для бітів, що завжди дорівнюють нулю. Тому адреса зберігаються в cегментному регістрі як шіст. nnnn, а комп'ютер думає, що існує ще чотири нульових молодших біта (одна шіст. цифра), тобто шіст. nnnn0. Таким чином, тичина. FFFF0 дозволяє адресувати до 1048560 байт. Якщо ви сумніваєтесь, то декодуйте кожне тичина. F як двійкове 1111, врахуйте нульові біти і складете значення для одиничних біт. Процесор 80286 використовує 24 біта для адресації так, що FFFFF0 дозволяє адресувати до 16 мільйонів байт, а процесор 80386 може адресувати до чотирьох мільярдів байт.

3. Граматичні конструкції, які відповідають цим поняттям

РЕГІСТРИ

Процесори 8086/8088 мають 14 регістрів, використовуваних для yправления програмою, що виконується, для адресації пам'яті і для забезпечення арифметичних обчислень. Кожен регістр має довжину в одне слово (16 біт) і адресується по імені. Біти регістра прийняті нумерувати ліворуч праворуч:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Процесори 80286 і 80386 мають ряд додаткових регістрів, деякі з них 16-бітові. Ці регістри тут не розглядаються. Сегментні регістри CS, DS, SS і ES.

Кожен сегментний регістр забезпечує адресацію 64ДО пам'яті, що називається поточним сегментом. Як показано раніше, cегмент вирівняний на границю параграфа і його адреса в сегментному pегістрі припускає наявність праворуч чотирьох нульових бітів.

  1. Регістр CS.

Регістр сегмента коду містить початковий адреса сегмента коду. Ця адреса плюс величина зсуву в командному покажчику (IP) визначає адреса команди, яка повинна бути обрана для виконання. Для звичайних програм немає необхідності робити посилання на регістр CS.

  1. Регістр DS.

Регістр сегмента даних містить початковий адрес сегмента даних. Ця адреса плюс величина зсуву, визначена в команді, вказують на конкретний осередок у сегменті даних.

3. Регістр SS.

Регістр сегмента стека містить початковий адрес в сегменті стека.

4. Регістр ES. Деякі операції над рядками використовують додатковий сегментний регістр для керування адреси цієї пам'яті. У даному контексті регістр ES зв'язаний з індексним регістром DI. Якщо необхідно використовувати регістр ES, асемблерна програма повинна його інніціалізувати.

Регістри загального призначення: AX, BX, CX і DX

При програмуванні на асемблере регістри загального призначення є "робочими конячками". Особливість цих регістрів полягає в тому, що можлива адресація їх як одного цілого чи слова як oднобайтової частини. Лівий байт є старшою частиною (high), a правий - молодшою частиною (low). Наприклад, двобайтовий регістр CX складається з двох однобайтових: CH і CL, і посилання на регістр можливі по кожному з цих трьох імен. Наступні три асемблерні команди засилають нулі в регістри CX, CH і CL, відповідно:

MOV CX,00

MOV CH,00

MOV CL,00

1. Регістр AX. Регістр AX є основним суматором і застосовується для всіх операцій уведення-висновку, деяких операцій над рядками і деяких арифметичних операцій. Наприклад, команди множення, розподілу і зрушення припускають використання регістра AX. Деякі команди генерують більш ефективний код, якщо вони мають посилання на регістр AX.

AX: ¦ AH ¦ AL ¦

2. Регістр BX. Регістр BX є базовим регістром. Це єдиний регістр загального призначення, що може використовуватися в якості "індексу" для розширеної адресаціі. Інше загальне застосування його - обчислення.

BX: ¦ BH ¦ BL ¦

3. Регістр CX. Регістр CX є лічильником. Він необхідний для керування числом повторень циклів і для операцій зрушення уліво або вправо. Регістр CX використовується також для обчислень.

CX: ¦ CH ¦ CL ¦

4. Регістр DX. Регістр DX є регістром даних. Він застосовується для деяких операцій уведення/висновку і тих операцій множення і розподілу над великими числами, які використовують реєстрову пару DX і AX.

DX: ¦ DH ¦ DL ¦

Будь-які регістри загального призначення можуть використовуватися для додаваня і вирахування як 8-ми, так і 16-ти бітових значень.

Реєстрові покажчики: SP і BP

Реєстрові покажчики SP і BP забезпечують системі доступ до даних у сегменті стека. Рідше вони використовуються для операцій додавання і вирахування.

1. Регістр SP. Покажчик стека забезпечує використання стека в пам'яті, дозволяє тимчасово зберігати адреса і інколи дані. Цей регістр зв'язаний з регістром SS для адреси цього стека.

2. Регістр BP. Покажчик бази полегшує доступ до параметрів: даним і адресам переданим через стек.

Індексні регістри: SI і DI

Обоє індексні регістри можливі для розширеної адресації і для використа- ння в операціях додавання і вирахування.

1. Регістр SI. Цей регістр є індексом джерела і застосовується для деяких операцій над рядками. У даному контексті регістр SI зв'язаний з регістром DS.

2. Регістр DI. Цей регістр є індексом призначення і застосовується також для строкових операцій. У даному контексті регістр DI зв'язаний з регістром ES.

Регістр командного покажчика: IP

Регістр IP містить зсув на команду, що повинна бути виконана. Звичайно цей регістр у програмі не використовується, але він може змінювати своє значення при використанні відлагоджувача DOS DEBUG для тестування програми.

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

Дев'ять з 16 бітів флагового регістра є активними і визначають поточний стан машини і результати виконання. Багато арифметичних команд і команди порівняння змінюють стан прапорів. Призначення флагових бітів:

Прапор Призначення

O (Переповнення) Вказує на переповнення старшого біта при арифметичних командах.

D (Напрямок) Позначає ліве чи праве направлення чи пересилання порівняння строкових даних (даних у пам'яті перевищуючих довжину одного слова).

I (Переривання) - Вказує на можливість зовнішніх переривань.

T (Покроковий режим) - Забезпечує можливість роботи процесора в покроковому режимі.

Наприклад, програма DOS DEBUG впливає на даний прапор так, що ймовірне покрокове виконання кожної команди для перевірки зміни вмісту регістрів і пам'яті.

S (Знак) Містить результуючий знак після арифметичних операцій (0 - плюс, 1 - мінус).

Z (Нуль) Показує результат арифметичних операцій і операцій порівняння (0 - ненульовий, 1 - нульовий результат).

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

P (Контроль парності) Показує парність молодших 8-бітних даних (1 - парне і 0 - непарне число).

C (Перенос) Містить перенос зі старшого біта, після арифметичних операцій, а також останній біт при зрушеннях або циклічних зрушеннях.

Під час програмування на асемблері, частіше всього використовуються прапори O, S, Z, і C для арифметичних операцій і операцій порівняння, а прапор D для позначення напрямку в операціях над рядками. У наступних розділах міститься більш докладна інформація про флаговий pегістр.

4. Тип даних в асемблері. Поняття "байт", "півбайт", "слово", та інші

ДИРЕКТИВИ ВИЗНАЧЕННЯ ДАНИХ

Асемблер забезпечує два способи визначення даних : по-перше, через указівку довжини даних і, по-друге, по їх змісту. Розглянемо основний формат визначення даних:

[ім'я] Dn вираження - Ім'я елемента даних не обов'язково (це вказується квадратними дужками), але якщо в програмі існують посилання на деякий елемент, то це робиться за допомогою імені. Правила написання імен приведені в розділі "Формат кодування" у розділі 3.

- Для визначення елементів даних існують наступні директиви: DB (байт), DW (слово), DD (подвійне слово), DQ (учетверенное слово) і DT (десять байт).

- Вираження може містити константу, наприклад: FLD1 DB 25 чи знак питання для невизначеного значення, наприклад: FLDB DB ?

Вираження може містити кілька констант, розділених комами й обмеженими тільки довжиною рядка: FLD3 DB 11, 12, 13, 14, 15, 16, ...

Асемблер визначає ці константи у виді послідовності суміжних байт. Посилання по імені FLD3 вказує на першу константу, 11, по FLD3+1 - на другу, 12. (FLD3 можна представити як FLD3+0). Наприклад команда MOV AL,FLD3+3 завантажує в регістр AL значення 14 (тичина. 0E). Вираження допускає також повторення константи в наступному форматі:

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5193
Авторов
на СтудИзбе
434
Средний доход
с одного платного файла
Обучение Подробнее