ОСОБЛИВОСТІ ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ 32 РОЗРЯДНОГО АСЕМБЛЕРА

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системне програмування

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
ЗВІТ до лабораторної роботи 1 з курсу “ Системне програмування ” “ОСОБЛИВОСТІ ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ 32 РОЗРЯДНОГО АСЕМБЛЕРА”
Львів
2012
МЕТА
Ознайомитись з програмною моделлю 32 розрядних процесорів Intel та оволодіти навиками створення програм, використовуючи 32 розрядний асемблер.
ЗАВДАННЯ
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. A={a[i]} – попередньозаданий масив з N чисел. c, d
- константи. Переконатися у правильності роботи програми використовуючи VKDebug. Скласти звіт про виконану роботу з приведенням тексту програми. Дати відповідь на контрольні запитання.
Завдання згідно варіанту:
4 Знайти скільки від’ємних елементів в масиві
A={a[i]} мають непарні індекси
ТЕОРЕТИЧНІ ВІДОМОСТІ
Програмна модель комп'ютера, частиною якої є програмна модель мікропроцесора, яка містить 32 регістри в тій чи іншій мірі доступних для використання програмістом.
Дані регістри можна розділити на дві великі групи: 16 регістрів користувача;
16 системних регістрів.
У програмах на мові асемблера регістри використовуються дуже інтенсивно. Більшість регістрів мають певне функціональне призначення. Робота з масивами Регістри загального призначення використовуються для адресації масивів. При цьому застосовується адресація по базі з масштабуванням: початкова адреса + база* масштабуючий коефіцієнт бази. Допустимі значення масштабуючого коефіцієнту бази (кількість байт, які займає 1 елемент масиву) рівні 1, 2, 4, 8.
Таким чином, щоб записати 3-й елемент масиву оголошеного мовою С як short arr[15] в edx треба написати код:
mov eax, arr mov ebx, 2 mov edx,[eax+ebx*2]
Регістри загального призначення Всі регістри цієї групи дозволяють звертатися до своїх “молодших” частин (див. рис. 1). Відмітимо, що використовувати для самостійної адресації можна тільки молодші 16 і 8-бітові частини цих регістрів. Старші 16 біт цих регістрів як самостійні об'єкти недоступні.
До РЗП відносяться:
eax/ax/ah/al (Accumulator register) — акумулятор. Застосовується для зберігання проміжних даних. У деяких командах використання цього регістра обов'язкове;
ebx/bx/bh/bl (Base register) — базовий регістр.
Застосовується для зберігання базової адреси деякого об'єкту в пам'яті;
ecx/cx/ch/cl (Count register) — регістр-лічильник.
Застосовується в командах, що проводять деякі дії, що повторюються. Його використання часто неявно і приховано в алгоритмі роботи відповідної команди.
Наприклад, команда організації циклу loop окрім передачі управління команді, що знаходиться за деякою адресою, аналізує і зменшує на одиницю значення регістра ecx/cx;
edx/dx/dh/dl (Data register) — регістр даних. Так само, як і регістр eax/ax/ah/al, він зберігає проміжні дані. У деяких командах його використання обов'язково; для деяких команд це відбувається неявно.
Наступні два регістри використовуються для підтримки операцій, що проводять послідовну обробку ланцюжків елементів, кожний з яких може мати довжину 32, 16 або 8 біт:
esi/si (Source Index register) — індекс джерела.
edi/di (Destination Index register) — індекс приймача (одержувача).
У архітектурі мікропроцесора на програмно-апаратному рівні підтримується така структура даних, як стек. Для роботи із стеком в системі команд мікропроцесора є спеціальні команди, а в програмній моделі мікропроцесора для цього існують спеціальні регістри:
esp/sp (Stack Pointer register) — регістр покажчика стека.
Містить покажчик вершини стека в поточному сегменті стека.
ebp/bp (Base Pointer register) — регістр покажчика бази кадру стека.
Призначений для організації довільного доступу до даних усередині стека.
Використання жорсткого закріплення регістрів для деяких команд дозволяє компактніше кодувати їх машинне уявлення. Знання цих особливостей дозволить вам при необхідності хоч би на декілька байт заощадити пам'ять, займану кодом програми.
/ Рис. 1. Регістри користувача мікропроцесорів i486 і Pentium
КОД ПРОГРАМИ
.586 ; використати плоску модель пам'яті і узгодження імен stdcall .model flat, stdcall option casemap: none ; оголошення службових процедур, макросів, змінних, констант include masm32includewindows.inc include masm32includekernel32.inc include masm32includemasm32.inc include masm32includedebug.inc ; підключення службових бібліотек includelib masm32libkernel32.lib includelib masm32libmasm32.lib includelib masm32libdebug.lib ; оголошення масиву даних .data Arr dd 1,-2,-3,-4,5
.code start:
mov ecx,5
mov ebx,0
prnt:
mov eax,[Arr+ecx*4-4]
cmp ecx,0
jp mitka
cmp eax,0
jge mitka
inc ebx mitka:
dec ecx
cmp ecx,0
jnz prnt
PrintDec ebx,"Count positive"
invoke ExitProcess, NULL ; виклик процедури завершення процесу end start
РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ
/
ВИСНОВОК В даній лабораторній роботі я ознайомився з програмною моделлю 32 розрядних процесорів Intel та оволодів навиками створення програм, використовуючи 32 розрядний асемблер.
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Новини