Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .386
- .model flat, stdcall
- option casemap :none
- ; To get unicode support
- include \masm32\include\kernel32.inc
- include \masm32\include\windows.inc
- includelib \masm32\lib\kernel32.lib
- include \masm32\include\user32.inc
- includelib \masm32\lib\user32.lib
- BSIZE EQU 50 ;размер буфера для ввода данных
- .data
- buf db 128 dup(?)
- format db "%d",0
- len dd ?
- sum dd ?
- msg0 db "Enter hex: "
- msg1 db "This is hex and sum = "
- msg2 db "This isn't hex"
- buffer db "3Ah";BSIZE dup (?)
- cread dd ?
- written dd ?
- stdin dd ?
- stdout dd ?
- .code
- main:
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov stdin,eax
- invoke GetStdHandle, STD_OUTPUT_HANDLE
- mov stdout,eax
- ;invoke WriteConsoleA,stdout, ADDR msg0, sizeof msg0, ADDR written,0
- ; invoke ReadConsole,stdin, ADDR buffer, BSIZE, ADDR cread,0
- lea edi, buffer
- or ecx,-1
- mov al,0
- repnz scasb
- not ecx
- dec ecx
- mov len,ecx
- xor eax, eax
- xor edx, edx
- mov ecx, len
- dec ecx
- lea esi, buffer
- lea edi, buffer
- add edi, len
- dec edi
- mov al, byte ptr[edi]
- cmp al, 104
- jne m_not
- m_beg :
- mov al, byte ptr[esi]
- mov dl, 48
- cmp al, dl
- jb m_not
- mov dl, 57
- cmp al, dl
- jbe m_add_num
- mov dl, 64
- cmp al, dl
- jbe m_not
- mov dl, 70
- cmp al, dl
- jbe m_add_letter1
- mov dl, 96
- cmp al, dl
- jbe m_not
- mov dl, 102
- cmp al, dl
- jbe m_add_letter2
- ja m_not
- m_loop:
- inc esi
- loop m_beg
- jmp m_yes
- m_add_num :
- xor ebx, ebx
- add ebx, eax
- sub ebx, 48
- add ebx, sum
- mov sum, ebx
- jmp m_loop
- m_add_letter1 :
- xor ebx, ebx
- add ebx, eax
- sub ebx, 55
- add ebx, sum
- mov sum, ebx
- jmp m_loop
- m_add_letter2 :
- xor ebx, ebx
- add ebx, eax
- sub ebx, 87
- add ebx, sum
- mov sum, ebx
- jmp m_loop
- m_not :
- invoke WriteConsoleA,stdout, ADDR msg2, sizeof msg2, ADDR written,0
- mov eax, len
- ;invoke wsprintf , ADDR buf,ADDR format, eax
- ;invoke WriteConsoleA,stdout, ADDR buf, cread, ADDR written,0
- jmp m_end
- m_yes :
- invoke wsprintf , ADDR buf,ADDR format, sum
- invoke WriteConsoleA,stdout, ADDR msg1, sizeof msg1, ADDR written,0
- invoke WriteConsoleA,stdout, ADDR buf, sizeof buf, ADDR written,0
- m_end:
- invoke ExitProcess, 0
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement