МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
Лабораторна робота № 1
з дисципліни:
" Системне програмування "
Мета: Ознайомитись з програмною моделлю 32 розрядних процесорів Intel та оволодіти навиками створення програм, використовуючи 32 розрядний асемблер.
Програмна модель комп'ютера, частиною якої є програмна модель мікропроцесора, яка містить 32 регістри в тій чи іншій мірі доступних для використання програмістом.
Робота з масивами
Регістри загального призначення використовуються для адресації масивів. При цьому застосовується адресація по базі з масштабуванням: початкова адреса + база* масштабуючий коефіцієнт бази. Допустимі значення масштабуючого коефіцієнту бази (кількість байт, які займає 1 елемент масиву) рівні 1, 2, 4, 8.
Таким чином, щоб записати 3-й елемент масиву оголошеного мовою С як short arr[15] в edx треба написати код:
mov eax, arr
mov ebx, 2
mov edx,[eax+ebx*2]
ЗАВДАННЯ
6
Знайти скільки додатних елементів масиву A={a[i]} задовольняють умову: с <= a[i] <= d
Код програми:
.586
; використати плоску модель пам'яті і узгодження імен stdcall
.model flat, stdcall
option casemap: none
; оголошення службових процедур, макросів, змінних, констант
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
; підключення службових бібліотек
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
; оголошення масиву даних
.data
Arr dd 15,15,20,-5,5,15,-96,9,3,60;опис масиву даних
Q dw -10;опис нижньої межі Q
D dw 20;опис верхньої межі D
S dd 0h;кількість додатніх елементів
.code
start:
;виводимо елементи масиву на екран у зворотньому порядку
mov ecx,10
prnt:
mov eax,[Arr+ecx*4-4]
PrintDec eax,"Arr value=" ; виклик макросу відлагодження
dec ecx
cmp ecx,0
jnz prnt
;робимо варіант по списку
mov ecx,10
q1:
mov eax,[Arr+ecx*4-4]
cmp eax,0 ; порівнюємо число з нулем
jge next
jl mitkaExit
next:
cmp ax,Q ; порівнюємо число з нижньою межею
jl mitkaExit
jge mitkaD
mitkaD:
cmp ax, D
jg mitkaExit ; порівнюємо число з верхньою межею
jle Sumator
Sumator:
inc S ; додаємо до S одиницю, якщо всі умови справдились
jmp mitkaExit
mitkaExit:
dec ecx
cmp ecx,0 ;перевіряємо чи кінець масиву
jnz q1
mov eax,S
PrintDec eax,"K-st elementiv." ; виклик макросу відлагодження
invoke ExitProcess, NULL ; виклик процедури завершення процесу
end start
Висновок: На цій лабораторній роботі я створив програму відповідно мого варіанту і навчився використовувати 32х розрядний асемблер.