Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- format PE console
- entry start
- include 'win32ax.inc'
- include 'api\kernel32.inc'
- section '.idata' import data readable
- library kernel32, 'kernel32.dll',\
- msvcrt, 'msvcrt.dll'
- import msvcrt,\
- printf, 'printf',\
- scanf, 'scanf'
- section '.data' data readable writeable
- a dd 1
- b dd 2
- c dd 3
- d dd 4
- r_1 dd ? ; = 47
- r_2 dd ? ; = 75
- r_3 dd ? ; = 47
- r_4 dd ? ; = 75
- section '.code' code readable executable
- start:
- ; call data_v
- call Get_var
- mov eax, [a]
- shl eax, 2
- add eax, [a]
- mov [r_1], eax
- mov eax, [b]
- add eax, [c]
- add eax, [d]
- mov [r_2], eax
- shr eax, 1
- mov [r_3], eax
- ;- - - - - - - - - - - - -
- mov eax, [r_1]
- mov ebx, [r_3]
- sub eax, ebx
- ;- - - - - - - - - - - - -
- mov [r_4], eax
- call check_2
- ;------------------------
- ; add ax, [r_1] ; 5) (r_1 + r_2) = (47 + 75) = 122 (answer)
- ;------------------------
- cinvoke scanf, <"%d", 10, 0>, 76313
- invoke ExitProcess, 0
- check: cinvoke printf, <"a = %d", 10, 0>, [a]
- cinvoke printf, <"b = %d", 10, 0>, [b]
- cinvoke printf, <"c = %d", 10, 0>, [c]
- cinvoke printf, <"d = %d", 10, 0>, [d]
- ret
- check_2: cinvoke printf, <"r_1 = %d", 10, 0>, [r_1]
- cinvoke printf, <"r_2 = %d", 10, 0>, [r_2]
- cinvoke printf, <"r_3 = %d", 10, 0>, [r_3]
- cinvoke printf, <"r_4 = %d", 10, 0>, [r_4]
- ret
- data_v: push eax
- push ebx
- push edx
- cinvoke printf, <"Enter the variables a, b, c and d: ", 10, 0>
- cinvoke scanf, <"%d%d%d%d", 10, 0>, a, b, c, d
- pop edx
- pop ebx
- pop eax
- ret
- ; Функция ожидает от пользователя ввод: a, b, c, d
- ; Например, так: 1 22 3 7
- ;/////////////////////////////////////////////////////////////
- proc Get_var ;//
- cinvoke printf, <"Enter: a, b, c and d: ", 0>
- cinvoke scanf, <"%d%d%d%d">, a, b, c, d
- ret
- endp
- ;//////////////////////////////////////////////////////////////////////////////////////
- ;//////////////////////////////////////////////////////////////////////////////////////
- ;//////////////////////////////////////////////////////////////////////////////////////
- format PE console
- entry start
- include 'win32ax.inc'
- include 'api\kernel32.inc'
- section '.data' data readable writeable
- X dd 123 ; Кол-во книг на конец 2011-го года
- N dd 23 ; Закупка ежегодная книг
- M dd 42 ; Потери ежегодные
- Y dd 2012 ; Год, для которого требуется подсчитать остаток книг
- ; X dd 10
- ; N dd 3
- ; M dd 4
- ; Y dd 2013
- result dd ?
- section '.code' code readable executable
- ; - - - - - - - - - - - - - - - - - - - - -
- start:
- ; Чтение входных данных
- invoke scanf, "%d%d%d%d", X, N, M, Y
- mov eax, [Y] ; Вычисление количества лет
- sub eax, 2011
- mov ecx, eax
- mov eax, [N] ; Вычисление изменения количества книг за каждый год
- sub eax, [M]
- imul eax, ecx ; Умножение изменения на количество лет
- add eax, [X] ; Добавление изменения к начальному количеству книг
- mov [result], eax ; Сохранение результата
- cinvoke printf, <"%d", 10, 0>, eax; [result]; eax ; Вывод результата
- ;------------------------
- cinvoke scanf, <"%d", 10, 0>, 76313
- invoke ExitProcess, 0
- section '.idata' import data readable
- library kernel32, 'kernel32.dll',\
- msvcrt, 'msvcrt.dll'
- import msvcrt,\
- printf, 'printf',\
- scanf, 'scanf'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement