Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 1
з дисципліни: “Системне програмування”
на тему: “Особливості програмування з використанням 32-розрядного Асемблера”
Мета лабораторної роботи
Ознайомитись з програмною моделлю 32-розрядних мікропроцесорів Intel та оволодіти навиками створення програм, використовуючи 32-розрядний Асемблер.
Теоретичні відомості
Основою для розробки низькорівневого системного програмного забезпечення є програмна модель комп’ютера, частиною якої є програмна модель мікропроцесора. До складу програмної моделі мікропроцесорів Intel сімейства x86 входять 32 регістри в тій чи іншій мірі доступні для використання програмістом. Дані регістри можна розділити на дві великі групи:
16 регістрів користувача;
16 системних регістрів.
У програмах на мові асемблера регістри використовуються дуже інтенсивно. Більшість регістрів мають певне функціональне призначення.
Індивідуальне завдання
1. Створити, використовуючи мову асемблера мікропроцесорів сімейства x86 Intel, *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. A = {a[i]} – наперед заданий масив з N чисел цілих чисел. c, d – цілі константи. K, L – цілі додатні числа.
2. Переконатися у правильності роботи програми використовуючи VKDebug.
3. Скласти звіт про виконану роботу з приведенням тексту програми.
4. Дати відповідь на контрольні запитання.
29.
Знайти суму елементів масиву A за умови a[i] >= c/d
Код програми
.686 ; 32-бітний режим
.model flat, stdcall ; використати плоску модель пам'яті і узгодження імен stdcall
option casemap: none ; нерозрізнення великих і малих символів
; оголошення службових процедур, макросів, змінних, констант
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
include \masm32\include\user32.inc
; підключення службових бібліотек
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
includelib \masm32\lib\user32.lib
.data
arr dd -1, -4, 2, 1
n dd 4 ; number of elements in the array
ConstC dd 6
ConstD dd -2
sum dd 0 ; result
.code
program:
mov eax, ConstC
mov edx, 0
idiv ConstD ; eax = c/d
PrintDec eax, "c/d" ; print c/d in VKdebug
mov ecx, 0
test_arr:
mov edx, arr[ecx * 4]
PrintDec edx, "arr[i]" ; print arr[i] in VKdebug
cmp arr[ecx * 4], eax
jl increment ; if (arr[i] < c/d) goto increment (skip addition)
add sum, edx
PrintDec sum ; print sum in VKdebug
increment:
inc ecx
cmp ecx, n
jl test_arr ; if (ecx < n) goto test_arr
invoke ExitProcess, NULL ; виклик процедури завершення процесу
end program
Результат виконання програми
–1 + 2 + 1 = 2
/
Висновок
Я ознайомився з програмною моделлю 32-розрядних мікропроцесорів Intel та оволодів навиками створення програм, використовуючи 32-розрядний Асемблер.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!