2012-03-29 62 views
0

我嘗試使用以下masm代碼輸出cmd屏幕中hello的字符串長度。 我創建了一個名爲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

控制在標籤「開始」開始,因爲你寫了「結束的開始」,然後在「RET」產生。 「調用StdOut,eax」和「調用ExitProcess,0」從未執行過。要在cmd屏幕上輸出你好的字符串長度,你應該改變如下:

strlo proc parm:DWORD 
... 
strlo endp 

start: 

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