Процедури з параметрами
Автор: Andrii Ivankov • Март 19, 2023 • Лабораторная работа • 321 Слов (2 Страниц) • 130 Просмотры
Лабораторна робота №3
Тема. Процедури з параметрами
Мета роботи: набути практичних навичок складання, налагодження та виконання програм, написаних мовою Асемблер і оформлених у вигляді процедур з параметрами в середовищі програмування masm64.
Варіант 8
[pic 1]
[pic 2]
Код програми:
include win64a.inc ; підключені бібліотеки
count PROTO arg_a:QWORD, arg_b:QWORD, arg_c:QWORD, arg_d:QWORD, arg_e:QWORD, arg_f:QWORD
.data
_a1 dq 2
_b1 dq 4
_c1 dq 19
_d1 dq 2
_e1 dq 3
_f1 dq 4
_res1 dq 0
_res2 dq 0
_title db "ЛР3. Процедури. masm64",0
strbuf dq ?,0
_text db "Обчислити значення виразу: ef+d/c-ab", 0ah, "Результат: %d",0ah, "Адреса змінної в пам’яті: %p",0ah,0ah, "Автор: студент 2 курсу спец. ",10, 9, 0
.code
count proc arg_a:QWORD, arg_b:QWORD, arg_c:QWORD, arg_d:QWORD, arg_e:QWORD, arg_f:QWORD
mov r12,rdx ;збереження результату arg b
mov r11,[rbp+28h] ; занесення arg_f
mov rax,[rbp+20h] ; занесення arg_e
mul r11 ; множення
mov _res1,rax ; тут 12
mov rax,r9 ; arg_d
div r8 ; arf_c ; ділення
mov rsi,rax ; тут 0
add rsi, _res1 ;додавання проміжкового результату
mov _res2,rsi ;збереження результату
mov rax,rcx ; занесення arg_a
mul r12 ; arg_b ;множення
mov r13,rax
sub _res2,r13
ret
count endp
WinMain proc
sub rsp,28h; вирівнювання стеку 28h=32d+8; 32d x 8 = 256; 8 -повернення
mov rbp,rsp ; збереження вирівняного значення стеку
invoke count,_a1,_b1,_c1,_d1,_e1,_f1
invoke wsprintf, ADDR strbuf, ADDR _text, _res2
invoke MessageBox, NULL, addr strbuf, addr _title,MB_ICONINFORMATION
invoke ExitProcess,0
WinMain endp
end
Результат компілювання:
[pic 3]
[pic 4]
[pic 5]
Код програми:
...