.386P ; плоская модель .MODEL FLAT, stdcall ; константы STD_OUTPUT_HANDLE equ -11 ; прототипы внешних процедур EXTERN GetStdHandle:NEAR EXTERN WriteConsoleA:NEAR EXTERN ExitProcess:NEAR ; директивы компоновщику для подключения библиотек includelib c:\tasm32\lib\import32.lib ;------------------------------------------------------------ ; сегмент данных _DATA SEGMENT DWORD PUBLIC USE32 'DATA' ; строка в DOS-овской кодировке STR1 DB "Консольное приложение",0 LENS DD ? ; количество выведенных символов RES DD ? _DATA ENDS ; сегмент кода _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: ; получить HANDLE вывода PUSH STD_OUTPUT_HANDLE CALL GetStdHandle ; длина строки PUSH OFFSET STR1 CALL LENSTR ; вывести строку PUSH OFFSET RES ; резерв PUSH OFFSET LENS ; выведено символов PUSH EBX ; длина строки PUSH OFFSET STR1 ; адрес строки PUSH EAX ; HANDLE вывода CALL WriteConsoleA PUSH 0 CALL ExitProcess ; строка - [EBP+08H] ; длина в EBX LENSTR PROC PUSH EBP MOV EBP,ESP PUSH EAX ; ---------- CLD MOV EDI, DWORD PTR [EBP+08H] MOV EBX,EDI MOV ECX,100 ; ограничить длину строки XOR AL,AL REPNE SCASB ; найти символ 0 SUB EDI, EBX ; длина строки, включая 0 MOV EBX,EDI DEC EBX ; ---------- POP EAX POP EBP RET 4 LENSTR ENDP _TEXT ENDS END START |