0

I try to ouput the string length of hello in cmd screen using the following masm code. I create a function called strlo to compute string length.

.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

When I run it, I get no output.

F:\masm32>len.exe

F:\masm32>

4

2 に答える 2

1

strlo1 つの問題は、コードの途中での定義があることです。定義された場所で実行されます。代わりに、それを最後に移動して、メイン コードを次のようにする必要があります。

invoke strlo,addr msg
invoke StdOut,eax
invoke ExitProcess,0
于 2012-03-29T09:06:00.383 に答える
0

「end start」と書いたので、制御はラベル「start」から始まり、「ret」で譲ります。"invoke StdOut,eax" と "invoke ExitProcess,0" は実行されませんでした。コマンド画面で hello の文字列の長さを出力するには、以下のように変更する必要があります。

strlo proc parm:DWORD
...
strlo endp

start:

invoke strlo,addr msg
invoke StdOut,eax
...
于 2012-05-29T13:22:15.797 に答える