.686 .model flat, stdcall option casemap :none include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data user_input DB 32 DUP(?) format_str DB "%s", 0 format_dec DB "%d", 0Ah, 0 .code start: ; 문자열 입력 받음 PUSH offset user_input ; user_input 주소 PUSH offset format_str ; "%s" 주소 CALL _imp__scanf ; scanf 호출 ADD ESP, 8 ; 인자 스택 정리 ; 문자열 ===> 정수 변환 PUSH offset user_input ; 사용자로부터 입력받은 문자열의 주소를 인자로 넘김 CALL str2int ; EAX에 변환된 정수를 리턴하는 함수 ; 화면에 정수 출력 PUSH EAX ; 변환된 정수 (int) PUSH offset format_dec ; "%d\\n" 주소 CALL _imp__printf ; printf 호출 ADD ESP, 8 ; 인자 스택 정리 ; 프로그램 종료 PUSH 0 CALL ExitProcess RET str2int PROC XOR EAX, EAX ; EAX = 0 XOR ECX, ECX ; ECX = 0 MOV EBX, 10 ; EBX = 10 MOV ESI, [ESP + 4] ; 문자열 주소를 ESI에 담음 nextchar: MOV CL, BYTE PTR [ESI] ; 1바이트를 읽어 CL에 저장 CMP CL, '0' ; JL str2int_ret ; CL < '0'? then end CMP CL, '9' ; JG str2int_ret ; CL > '9'? then end SUB CL, '0' ; CL -= '0' MUL EBX ; EAX *= EBX (=10) ADD EAX, ECX ; EAX += ECX INC ESI ; 다음 문자 가리키도록 ESI 1 증가 JMP nextchar ; 다음 문자 읽으러 감 str2int_ret: RET 4 ; 인자 스택을 4바이트 정리하면서 return str2int ENDP end start
위에 include, includelib에 \\ 문자가 빠졌넹... masm32include는 \\masm32\\include\\로, masm32lib은 \\masm32\\lib\\으로 고치면 동작함.
아무튼 코드 올린 핵심은 str2int 함수 부분을 잘 보시길...
코딩 직접 해서 올려주신건 감사한데 이렇게까지 진도를 안 나가서... 제거 코드 올려서 조언 좀 받아도 될까요
응 올려봐 ㅋㄷ
http://autogram.tk/이
중고차 어플리케이션 어떤가요?