Advertisement
dllbridge

Untitled

Mar 4th, 2025 (edited)
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. format  PE console
  2. entry   start
  3. include 'win32ax.inc'
  4. include 'api\kernel32.inc'
  5.  
  6.  
  7. section '.idata' import data readable
  8. library kernel32, 'kernel32.dll',\
  9.         msvcrt, 'msvcrt.dll'
  10.  
  11. import msvcrt,\
  12.        printf, 'printf',\
  13.        scanf, 'scanf'
  14.  
  15.  
  16.  
  17. section '.data' data readable writeable
  18.  
  19.            a     dd   1
  20.            b     dd   2
  21.            c     dd   3
  22.            d     dd   4
  23.            r_1   dd   ?       ; = 47
  24.            r_2   dd   ?       ; = 75
  25.            r_3   dd   ?       ; = 47
  26.            r_4   dd   ?       ; = 75
  27.  
  28. section '.code' code readable executable
  29.  
  30. start:
  31.          ; call data_v
  32.           call Get_var
  33.  
  34.           mov eax, [a]
  35.           shl eax, 2
  36.           add eax, [a]
  37.           mov [r_1], eax
  38.  
  39.           mov eax, [b]
  40.           add eax, [c]
  41.           add eax, [d]
  42.           mov [r_2], eax
  43.  
  44.           shr eax, 1
  45.           mov [r_3], eax
  46. ;- - - - - - - - - - - - -
  47.  
  48.           mov eax, [r_1]
  49.           mov ebx, [r_3]
  50.           sub eax, ebx
  51.  
  52. ;- - - - - - - - - - - - -
  53.           mov [r_4], eax
  54.           call check_2
  55.           ;------------------------
  56.  
  57.        ;  add ax, [r_1]      ; 5) (r_1 + r_2) = (47 + 75) = 122 (answer)
  58.  
  59.  
  60.           ;------------------------
  61.           cinvoke  scanf, <"%d", 10, 0>, 76313
  62.           invoke   ExitProcess, 0
  63.  
  64.  
  65.  check:   cinvoke  printf, <"a = %d", 10, 0>, [a]
  66.           cinvoke  printf, <"b = %d", 10, 0>, [b]
  67.           cinvoke  printf, <"c = %d", 10, 0>, [c]
  68.           cinvoke  printf, <"d = %d", 10, 0>, [d]
  69.  ret
  70.  
  71.  check_2: cinvoke  printf, <"r_1 = %d", 10, 0>, [r_1]
  72.           cinvoke  printf, <"r_2 = %d", 10, 0>, [r_2]
  73.           cinvoke  printf, <"r_3 = %d", 10, 0>, [r_3]
  74.           cinvoke  printf, <"r_4 = %d", 10, 0>, [r_4]
  75.  ret
  76.  
  77.  data_v:  push eax
  78.           push ebx
  79.           push edx
  80.           cinvoke  printf, <"Enter the variables a, b, c and d: ", 10, 0>
  81.           cinvoke  scanf, <"%d%d%d%d", 10, 0>, a, b, c, d
  82.  
  83.           pop edx
  84.           pop ebx
  85.           pop eax
  86.  ret
  87.  
  88.  ; Функция ожидает от пользователя ввод:  a, b, c, d
  89. ; Например, так: 1 22 3 7
  90. ;/////////////////////////////////////////////////////////////
  91. proc    Get_var                                            ;//
  92.  
  93.         cinvoke  printf, <"Enter: a, b, c and d:  ", 0>
  94.  
  95.         cinvoke  scanf, <"%d%d%d%d">, a, b, c, d
  96.         ret
  97. endp
  98.            
  99.  
  100.  
  101.  
  102. ;//////////////////////////////////////////////////////////////////////////////////////
  103.  
  104. ;//////////////////////////////////////////////////////////////////////////////////////
  105.  
  106. ;//////////////////////////////////////////////////////////////////////////////////////
  107.  
  108.  
  109.  
  110. format  PE console
  111. entry   start
  112. include 'win32ax.inc'
  113. include 'api\kernel32.inc'
  114.  
  115. section '.data' data readable writeable
  116.  
  117.     X dd  123     ; Кол-во книг на конец 2011-го года
  118.     N dd   23     ; Закупка ежегодная книг  
  119.     M dd   42     ; Потери ежегодные
  120.     Y dd 2012     ; Год, для которого требуется подсчитать остаток книг
  121.  
  122.   ;  X dd   10
  123.   ;  N dd    3
  124.   ;  M dd    4
  125.   ;  Y dd 2013
  126.     result dd ?
  127.  
  128.  
  129.  
  130.  
  131. section '.code' code readable executable
  132.  
  133.  
  134.  
  135. ; - - - - - - - - - - - - - - - - - - - -  -
  136. start:
  137.  
  138.  
  139.                                                     ; Чтение входных данных
  140.     invoke scanf, "%d%d%d%d", X, N, M, Y
  141.  
  142.     mov eax, [Y]                                 ; Вычисление количества лет
  143.     sub eax, 2011
  144.     mov ecx, eax
  145.  
  146.  
  147.     mov eax, [N]       ;   Вычисление изменения количества книг за каждый год
  148.     sub eax, [M]
  149.  
  150.     imul eax, ecx      ;                Умножение изменения на количество лет
  151.  
  152.     add eax, [X]       ;    Добавление изменения к начальному количеству книг
  153.  
  154.     mov [result], eax                                 ; Сохранение результата
  155.  
  156.     cinvoke printf, <"%d", 10, 0>, eax; [result]; eax                 ;    Вывод результата
  157.           ;------------------------
  158.           cinvoke  scanf, <"%d", 10, 0>, 76313
  159.           invoke   ExitProcess, 0
  160.  
  161.  
  162. section '.idata' import data readable
  163. library kernel32, 'kernel32.dll',\
  164.         msvcrt, 'msvcrt.dll'
  165.  
  166. import msvcrt,\
  167.        printf, 'printf',\
  168.        scanf, 'scanf'
  169.              
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement