You are on page 1of 4

Горбань Ю. В., ст. гр.

КІ-18
Лабораторна робота №5
Тема: «Використання WinAPI для створення програм на мові Assembler»
Мета роботи: навчитися використовуючи команди WinAPI для створення
найпростіших програм.

Завдання №1
Знайти суму чисел записаних у текстовий файл

Рисунок 5.1 – Вміст файлу

format PE Console 4.0


entry Start

include 'win32a.inc'

section '.text' code readable executable

Start:

cinvoke fopen, filename, type


mov ebx, eax
cinvoke fgets, buf, 100, ebx

call GetNumber

GetNumber:
xor esi, esi
xor ecx, ecx
xor edi, edi

loop1:
movzx ax, [buf+esi]

cmp ax, 20h; символ - пробел?


je convertToNum ; если да, то значит число закончилось,
конвертируем
;набор цифр в число
cmp ax, 0 ; конец строки?
je convertIfEnd
Горбань Ю. В., ст. гр. КІ-18
sub ax, 30h; если не пробел и не конец, то переводим аски код
в цифру

mov [num+esi], ax

inc [pow] ; максимальная степень основания (десяти)+1

inc ecx ; значение равно количеству цифр в числе


inc esi

jmp loop1

convertToNum:
push esi
call ConvertToNumber
jmp continue

convertIfEnd:
push esi
call ConvertToNumber
jmp finish

continue:
pop esi
inc edi
inc esi
xor ecx, ecx
jmp loop1

finish:
ret

ConvertToNumber:
convert:
xor eax, eax
mov ax, 10
push ecx
movzx ecx, [pow]
call Power
pop ecx
dec [pow]
mul byte[num+edi]
add [res], ax
inc edi
loop convert
ret

Power:
cmp [pow], 0
je zeroCase
cmp [pow], 1
je oneCase
Горбань Ю. В., ст. гр. КІ-18
sub ecx, 1
mov bx, ax
power:
mul bx
loop power
ret

zeroCase:
mov eax, 1
ret

oneCase:
movzx eax, ax
ret

Exit:
invoke ExitProcess, 0

section '.data' data readable writeable


space db 20h
pow db -1h
res dw 0
filename db 'numbers.txt',0
type db 'r',0
num dw ?
buf db ?

section '.idata' import data readable

library kernel, 'KERNEL32.DLL',\


msvcrt, 'MSVCRT.DLL'\

import kernel,\
SetConsoleTitleA, 'SetConsoleTitleA',\
GetStdHandle, 'GetStdHandle',\
WriteConsoleA, 'WriteConsoleA',\
ReadConsoleA, 'ReadConsoleA',\
ExitProcess, 'ExitProcess'

import msvcrt,\
printf, 'printf',\
fopen, 'fopen',\
fgets, 'fgets',\
fgetc, 'fgetc'\
;powr, 'pow'\
Горбань Ю. В., ст. гр. КІ-18
Рисунок 5.2 – Результат

Висновок: в ході лабораторної роботи було розглянуто функції WinApi;


створено програму з використанням функцій мови С.

You might also like