Advertisement
dllbridge

FASM = a * 5 – (b + c + d) / 2

Mar 12th, 2024 (edited)
663
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. ;----------------------------------------------------------------------
  8. section '.idata' import data readable
  9. library kernel32, 'kernel32.dll',\
  10.         msvcrt,     'msvcrt.dll'
  11.  
  12. import  msvcrt,\
  13.         printf, 'printf',\
  14.         scanf , 'scanf'
  15.  
  16.  
  17.  
  18. ;                                              a * 5 – (b + c + d) / 2
  19. ;----------------------------------------------------------------------
  20. section '.data' data readable writeable
  21.  
  22.            a     dd  1
  23.            b     dd  2
  24.            c     dd  3
  25.            d     dd  4
  26.            r_1   dd  ?     ; = a * 5
  27.            r_2   dd  ?     ; = b + c + d
  28.            r_3   dd  ?     ; = r_2 / 2
  29.            r_4   dd  ?     ; = r_1 - r_3     = a * 5 – (b + c + d) / 2
  30.  
  31. ;----------------------------------------------------------------------
  32. section '.code' code readable executable
  33.  
  34. start:    call Get_var
  35.  
  36.           call test_var
  37.  
  38.           mov eax, [a]      ; r_1 = a * 5
  39.           shl eax, 2
  40.           inc eax
  41.           mov [r_1], eax
  42.  
  43.           mov eax  , [b]     ; r_2 * a + b + c
  44.           add eax  , [c]
  45.           add eax  , [d]
  46.           mov [r_2], eax
  47.  
  48.           shr eax, 1         ; r_3 = r_2 / 2
  49.           mov [r_3], eax
  50.  
  51.  
  52.           mov eax, [r_1]     ; r-1 - r_3
  53.           sub eax, [r_3]
  54.           mov [r_4], eax
  55.  
  56.           call test_r_x
  57.           cinvoke  printf, <"         ", 10, 0>
  58.           cinvoke  printf, <"Answer:  ", 10, 0>
  59.           cinvoke  printf, <"- - - - - - - - - - - - - - - - -", 10, 0>
  60.           cinvoke  printf, <"a * 5 - (b + c + d) / 2 = %d", 10, 0>, [r_4]
  61.           ;------------------------
  62.           cinvoke  scanf, <"%d", 10, 0>, 76313
  63.           invoke   ExitProcess, 0
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ; Функция ожидает от пользователя ввод:  a, b, c, d
  71. ; Например, так: 1 22 3 7
  72. ;/////////////////////////////////////////////////////////////
  73. proc    Get_var                                            ;//
  74.  
  75.         cinvoke  printf, <"Enter: a, b, c and d:  ", 0>
  76.  
  77.         cinvoke  scanf, <"%d%d%d%d">, a, b, c, d
  78.         ret
  79. endp
  80.  
  81.  
  82.  
  83.  
  84.  
  85. ;Процедура, которая показывает содержимое: a, b, c, d
  86. ;----------------------------------------------------------------------
  87. test_var:   cinvoke  printf,           <10, 0>
  88.             cinvoke  printf, <"a = %d", 10, 0>, [a]
  89.             cinvoke  printf, <"b = %d", 10, 0>, [b]
  90.             cinvoke  printf, <"c = %d", 10, 0>, [c]
  91.             cinvoke  printf, <"d = %d", 10, 0>, [d]
  92. ret                                                                    ;Возврат из процедуры
  93.  
  94. ;Процедура, которая показывает содержимое: r_1, r_2, r_3, r_4
  95. ;----------------------------------------------------------------------
  96. test_r_x:   cinvoke  printf,           <10, 0>
  97.             cinvoke  printf, <"    a * 5 = r_1 = %d", 10, 0>, [r_1]
  98.             cinvoke  printf, <"b + c + d = r_2 = %d", 10, 0>, [r_2]
  99.             cinvoke  printf, <"  r_2 / 2 = r_3 = %d", 10, 0>, [r_3]
  100.             cinvoke  printf, <"r_1 - r_3 = r_4 = %d", 10, 0>, [r_4]
  101. ret
  102.  
  103.  
  104.  
  105.            
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement