Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 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-розрядний Асемблер.