2012-03-29 14 views
0

Ich versuche, die Zeichenfolge Länge von Hallo in cmd Bildschirm mit dem folgenden Mashmodus-Code. Ich erstelle eine Funktion namens strlo, um die Stringlänge zu berechnen.String-Länge in Mas

.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 

Wenn ich es ausführen, bekomme ich keine Ausgabe.

F: \ masm32> len.exe

F: \ masm32>

Antwort

1

Ein Problem ist, dass Sie die Definition von strlo in der Mitte des Codes haben. Es wird ausgeführt, wo es definiert ist. Stattdessen sollten Sie es bis zum Ende bewegen und Ihre Haupt-Code wie folgt aussehen lassen:

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

Die Steuerung beginnt bei Label „Start“, weil Sie „end start“ schrieb, ergibt sich dann bei „ret“. "stdOut, eax aufrufen" und "exitProcess aufrufen, 0" wurde nie ausgeführt. Um die Zeichenkettenlänge von hallo in cmd Bildschirm auszugeben, sollten Sie wie folgt ändern:

strlo proc parm:DWORD 
... 
strlo endp 

start: 

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