На
section .bss
a resd 1
b resd 1
c resd 1
d resd 1
result resd 1
buffer resb 16
section .text
global _start
_start:
mov eax, 3
mov ebx, 0
lea ecx, [buffer]
mov edx, 16
int 0x80
call str_to_int
mov [a], eax
mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [b], eax
mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [c], eax
mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [d], eax
mov eax, [a]
imul eax, [b]
mov ebx, [c]
xor edx, edx
mov ecx, [d]
div ecx
add eax, [a]
sub eax, [a]
mov [result], eax
mov eax, 1
xor ebx, ebx
int 0x80
str_to_int:
xor eax, eax
.loop:
movzx ebx, byte [buffer]
cmp ebx, 10
je .done
sub ebx, '0'
add eax, ebx
.loop2:
shl eax, 1
.done:
ret
xor eax,eax ;ЕАХ=0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0 ;открываем окно используя процедуру DialogProc
or eax,eax ;проверим eax=0
jz exit ;если да(нажата кнопка cancel), то переход к метке exit
lea esi, [d] ;адрес строки для перменной d
call StrToInt ;преобразование d в число результат в EAX
mov ebx,eax ;переносим получившееся в ebx из ячейки eax
lea esi, [c] ;адрес строки для перменной c
call StrToInt ;преобразование c в число результат в EAX
div ebx ;делим с на d результат в eax
mov ecx,eax
lea esi, [a] ;адрес строки для перменной a
call StrToInt ;преобразование a в число результат в EAX
mov ebx,eax ;переносим получившееся в ebx из ячейки eax
lea esi, [b] ;адрес строки для перменной b
call StrToInt ;преобразование b в число результат в EAX
mul ebx
add eax,ecx
sub eax,ebx