Guest User

Untitled

a guest
Oct 1st, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL FLAT, STDCALL
  3. ; прототипы внешних функций (процедур) описываются директивой EXTERN,
  4. ; после знака @ указывается общая длина передаваемых параметров,
  5. ; после двоеточия указывается тип внешнего объекта – процедура
  6. EXTERN  GetStdHandle@4: PROC
  7. EXTERN  WriteConsoleA@20: PROC
  8. EXTERN  CharToOemA@8: PROC
  9. EXTERN  ReadConsoleA@20: PROC
  10. EXTERN  lstrlenA@4: PROC
  11. EXTERN  ExitProcess@4: PROC; функция выхода из программы
  12.  
  13. .DATA; сегмент данных
  14. STRN DB "ВВЕДИТЕ ПЕРВОЕ ЧИСЛО:",13,10,0; выводимая строка, в конце добавлены
  15. ; управляющие символы: 13 – возврат каретки, 10 – переход на новую
  16. ; строку, 0 – конец строки; с использованием директивы DB
  17. ; резервируется массив байтов
  18. STRN2 DB "ВВЕДИТЕ ВТОРОЕ ЧИСЛО:",13,10,0
  19. FMT DB "Число %d", 0; строка со списком форматов для функции wsprintfA
  20. DIN DD ?; дескриптор ввода; директива DD резервирует память объемом
  21. ; 32 бита (4 байта), знак «?» используется для неинициализированных данных
  22. DOUT DD ?; дескриптор вывода
  23. BUF  DB 200 dup (?); буфер для вводимых/выводимых строк длиной 200 байтов
  24. LENS DD ?; переменная для количества выведенных символов
  25. FIR DB ?
  26. SEC DB ?
  27. LEN DD ?
  28.  
  29. .CODE; сегмент кода
  30.  
  31. MAIN PROC
  32.  
  33.  
  34. ;Ввод двух чисел
  35. MOV EAX, OFFSET STRN
  36. PUSH EAX
  37. PUSH EAX
  38. CALL CharToOemA@8
  39.  
  40. MOV EAX, OFFSET STRN2
  41. PUSH EAX
  42. PUSH EAX
  43. CALL CharToOemA@8
  44.  
  45. PUSH -11
  46. CALL GetStdHandle@4
  47. MOV DOUT, EAX
  48.  
  49. PUSH -10
  50. CALL GetStdHandle@4
  51. MOV DIN, EAX
  52.  
  53.  
  54. PUSH OFFSET STRN
  55. CALL lstrlenA@4
  56.  
  57. PUSH OFFSET STRN2
  58. CALL lstrlenA@4
  59.  
  60.  
  61.  
  62. PUSH 0
  63. PUSH OFFSET LEN
  64. PUSH EAX
  65. PUSH OFFSET STRN
  66. PUSH DOUT
  67. CALL WriteConsoleA@20
  68.  
  69.  
  70. PUSH 0
  71. PUSH OFFSET LEN
  72. PUSH 400
  73. PUSH OFFSET FIR
  74. PUSH DIN
  75. CALL ReadConsoleA@20
  76.  
  77. ;первое число
  78. MOV DI, 16
  79. MOV ECX, LEN
  80. MOV ESI, OFFSET FIR
  81. XOR BX,BX
  82. XOR AX,AX
  83.  
  84.  
  85. L1:
  86.     MOV BX, [ESI]
  87.     CMP BX, 40h
  88.     JA Symbol
  89.     SUB BX,'0'
  90.     MUL DI
  91.     ADD AX, BX
  92.     INC ESI
  93.  
  94. Symbol:
  95.     SUB BX, 37h
  96.     MUL DI
  97.     ADD AX, BX
  98.     INC ESI
  99.  
  100. LOOP L1
  101.  
  102.  
  103. PUSH 0
  104. PUSH OFFSET LEN
  105. PUSH EAX
  106. PUSH OFFSET STRN2
  107. PUSH DOUT
  108. CALL WriteConsoleA@20
  109.  
  110.  
  111. PUSH 0
  112. PUSH OFFSET LEN
  113. PUSH 200
  114. PUSH OFFSET SEC
  115. PUSH DIN
  116. CALL ReadConsoleA@20
  117.  
  118.  
  119.  
  120. MAIN ENDP
  121. END MAIN
Advertisement
Add Comment
Please, Sign In to add comment