2012-03-29 2 views
0

Я пытаюсь вывести длину строки hello в cmd-экране, используя следующий код masm. Я создаю функцию под названием strlo для вычисления длины строки.Длина строки в masm

.486 
.Model flat,Stdcall 
option casemap :none ; case sensitive 


include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\masm32.inc 
includelib \masm32\lib\masm32.lib 

strlo PROTO :DWORD 
.data 
msg db "Hello",0 

.data? 
pr dd ? 

.code 
start: 

invoke strlo,addr msg 
strlo proc parm:DWORD 
xor eax,eax 
mov edi,parm 
l1: 
cmp byte ptr [edi] ,0 
je l2 
inc edi 
inc eax 
jmp l1 
l2: 
ret 
strlo endp 
invoke StdOut,eax 
invoke ExitProcess,0 
end start 

Когда я запускаю его, я не получаю выход.

F: \ masm32> len.exe

F: \ masm32>

ответ

1

Одна проблема заключается в том, что у вас есть определение strlo в середине вашего кода. Он будет выполняться там, где он определен. Вместо этого вы должны переместить его до конца, и пусть ваш основной код выглядит следующим образом:

invoke strlo,addr msg 
invoke StdOut,eax 
invoke ExitProcess,0 
0

управления начинается с меткой «старт», потому что вы писали «конец начала», а затем дает в «РЭТ». «invoke StdOut, eax» и «invitProcess, 0» никогда не выполняются. Чтобы вывести длину строки приветствия на экране cmd, вы должны изменить, как показано ниже:

strlo proc parm:DWORD 
... 
strlo endp 

start: 

invoke strlo,addr msg 
invoke StdOut,eax 
... 
Смежные вопросы