Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. .386
  2. .model flat, stdcall
  3. option casemap :none
  4.  
  5. ; To get unicode support
  6. include \masm32\include\kernel32.inc
  7. include \masm32\include\windows.inc
  8. includelib \masm32\lib\kernel32.lib
  9.  
  10. include \masm32\include\user32.inc
  11. includelib \masm32\lib\user32.lib
  12.  
  13. BSIZE EQU 50 ;размер буфера для ввода данных
  14.  
  15. .data
  16. buf db 128 dup(?)
  17. format db "%d",0
  18. len dd ?
  19. sum dd ?
  20. msg0 db "Enter hex: "
  21. msg1 db "This is hex and sum = "
  22. msg2 db "This isn't hex"
  23. buffer db "3Ah";BSIZE dup (?)
  24. cread dd ?
  25. written dd ?
  26. stdin dd ?
  27. stdout dd ?
  28.  
  29. .code
  30. main:
  31. invoke GetStdHandle, STD_INPUT_HANDLE
  32. mov stdin,eax
  33. invoke GetStdHandle, STD_OUTPUT_HANDLE
  34. mov stdout,eax
  35. ;invoke WriteConsoleA,stdout, ADDR msg0, sizeof msg0, ADDR written,0
  36. ; invoke ReadConsole,stdin, ADDR buffer, BSIZE, ADDR cread,0
  37. lea edi, buffer
  38. or ecx,-1
  39. mov al,0
  40. repnz scasb
  41. not ecx
  42. dec ecx
  43. mov len,ecx
  44. xor eax, eax
  45. xor edx, edx
  46. mov ecx, len
  47. dec ecx
  48. lea esi, buffer
  49. lea edi, buffer
  50. add edi, len
  51. dec edi
  52. mov al, byte ptr[edi]
  53. cmp al, 104
  54. jne m_not
  55. m_beg :
  56. mov al, byte ptr[esi]
  57. mov dl, 48
  58. cmp al, dl
  59. jb m_not
  60. mov dl, 57
  61. cmp al, dl
  62. jbe m_add_num
  63. mov dl, 64
  64. cmp al, dl
  65. jbe m_not
  66. mov dl, 70
  67. cmp al, dl
  68. jbe m_add_letter1
  69. mov dl, 96
  70. cmp al, dl
  71. jbe m_not
  72. mov dl, 102
  73. cmp al, dl
  74. jbe m_add_letter2
  75. ja m_not
  76. m_loop:
  77. inc esi
  78. loop m_beg
  79. jmp m_yes
  80. m_add_num :
  81. xor ebx, ebx
  82. add ebx, eax
  83. sub ebx, 48
  84. add ebx, sum
  85. mov sum, ebx
  86. jmp m_loop
  87. m_add_letter1 :
  88. xor ebx, ebx
  89. add ebx, eax
  90. sub ebx, 55
  91. add ebx, sum
  92. mov sum, ebx
  93. jmp m_loop
  94. m_add_letter2 :
  95. xor ebx, ebx
  96. add ebx, eax
  97. sub ebx, 87
  98. add ebx, sum
  99. mov sum, ebx
  100. jmp m_loop
  101. m_not :
  102. invoke WriteConsoleA,stdout, ADDR msg2, sizeof msg2, ADDR written,0
  103. mov eax, len
  104. ;invoke wsprintf , ADDR buf,ADDR format, eax
  105. ;invoke WriteConsoleA,stdout, ADDR buf, cread, ADDR written,0
  106. jmp m_end
  107. m_yes :
  108. invoke wsprintf , ADDR buf,ADDR format, sum
  109. invoke WriteConsoleA,stdout, ADDR msg1, sizeof msg1, ADDR written,0
  110. invoke WriteConsoleA,stdout, ADDR buf, sizeof buf, ADDR written,0
  111. m_end:
  112. invoke ExitProcess, 0
  113. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement