Длина строки в маске - PullRequest
0 голосов
/ 29 марта 2012

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

.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>

Ответы [ 2 ]

1 голос
/ 29 марта 2012

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

invoke strlo,addr msg
invoke StdOut,eax
invoke ExitProcess,0
0 голосов
/ 29 мая 2012

Управление начинается с метки «start», потому что вы написали «end start», а затем приводит к «ret»."invoke StdOut, eax" и "invoke ExitProcess, 0" никогда не выполнялись.Чтобы вывести длину строки hello на экране cmd, вы должны изменить, как показано ниже:

strlo proc parm:DWORD
...
strlo endp

start:

invoke strlo,addr msg
invoke StdOut,eax
...
...