Advertisement
Orrin19

FASM 2

Oct 25th, 2023
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;-------------------------------------------
  2. ;-- Рябцев Даниил, КИ22-16/1Б, ПР1.2, В20 --
  3. ;-------------------------------------------
  4.  
  5.  
  6. format PE Console
  7. entry start
  8. include 'win32a.inc'
  9.  
  10.  
  11. section '.data' data readable writeable
  12.  
  13.         prompt db 'Enter X and A:',10,0
  14.         input db '%lf',0
  15.         output_i db 'i  = %d',10,0
  16.         output_y1 db 'y1 = %5.3f',10,0
  17.         output_y2 db 'y2 = %5.3f',10,0
  18.         output_y db 'y  = %5.3f',10,0
  19.         newline db '',10,0
  20.  
  21.         a dq 0
  22.         x dq 0
  23.         y1 dq 0
  24.         y2 dq 0
  25.         y dq 0
  26.         i dd 0
  27.         n dd 10
  28.         temp dd 0
  29.  
  30.  
  31. section '.code' code readable writeable executable
  32.  
  33. start:
  34.         invoke printf, prompt
  35.         invoke scanf, input, x
  36.         invoke scanf, input, a
  37.         invoke printf, newline
  38.  
  39.         for:
  40.                 finit
  41.                 ;--- if (x >= 0) { else_1 } ---
  42.                 fldz
  43.                 fld [x]
  44.                 fcomip st1
  45.                 jae else_1
  46.  
  47.                 if_1:
  48.                         finit
  49.                         ;--- y1 = |x| -----
  50.                         fld [x]
  51.                         fabs
  52.                         fstp [y1]
  53.                         ;---------------------
  54.                         jmp if_1_out
  55.  
  56.                 else_1:
  57.                         finit
  58.                         ;--- y1 = x - a ----
  59.                         fld [x]
  60.                         fsub [a]
  61.                         fstp [y1]
  62.  
  63.         if_1_out:
  64.                 finit
  65.                 ;--- if (x mod 3 != 1) { else_2 } ---
  66.                 mov [temp], 3
  67.                 fild [temp]
  68.                 fld [x]
  69.                 fprem1
  70.                 fld1
  71.                 fcomip st1
  72.                 jne else_2
  73.  
  74.                 if_2:
  75.                         finit
  76.                         ;--- y2 = a + x ---
  77.                         fld [a]
  78.                         fadd [x]
  79.                         fstp [y2]
  80.                         ;--------------------
  81.                         jmp if_2_out
  82.  
  83.                else_2:
  84.                         finit
  85.                         ;--- y2 = 7.0 ---
  86.                         mov [temp], 7
  87.                         fild [temp]
  88.                         fstp [y2]
  89.                         ;----------------
  90.  
  91.         if_2_out:
  92.                 finit
  93.                 ;--- y = y1 - y2 -----
  94.                 fld [y1]
  95.                 fsub [y2]
  96.                 fstp [y]
  97.                 ;---------------------
  98.  
  99.                 invoke printf, output_i, [i]
  100.                 invoke printf, output_y1, dword [y1], dword [y1+4]
  101.                 invoke printf, output_y2, dword [y2], dword [y2+4]
  102.                 invoke printf, output_y, dword [y], dword [y+4]
  103.                 invoke printf, newline
  104.  
  105.  
  106.                 ;----- x++ -----------
  107.                 finit
  108.                 fld1
  109.                 fadd [x]
  110.                 fstp [x]
  111.                 ;---------------------
  112.  
  113.  
  114.                 ;---- i++; i < n -----
  115.                 mov ecx, [i]
  116.                 inc ecx
  117.                 cmp ecx, [n]
  118.                 mov [i], ecx
  119.                 jne for
  120.                 ;---------------------
  121.  
  122.         invoke getch
  123.         invoke ExitProcess, 0
  124.  
  125.  
  126. section '.idata' data import readable
  127.         library kernel, 'kernel32.dll',\
  128.                 msvcrt, 'msvcrt.dll'
  129.  
  130.         import kernel,\
  131.                 ExitProcess, 'ExitProcess'
  132.          
  133.         import msvcrt,\
  134.                 printf, 'printf',\
  135.                 getch, '_getch', scanf, 'scanf'
  136.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement