2011-01-22 8 views
0

私はmasmでおもちゃになっています。なぜこのコードが機能していないのか分かりません。文字列内のすべての値を 'm'に変更する

.data 
MsgBoxCaption db "Iczelion Tutorial No.2",0 
MsgBoxText  db "Win32 Assembly is Great!",0 
savedAddr DWORD ? 

.code 
start: 
mov eax, 10 
mov savedAddr, OFFSET MsgBoxText 

lab: 
inc MsgBoxText 
MOV MsgBoxText, 'm' 
cmp eax, 0 
dec eax 
jnz lab 

invoke MessageBox, NULL, savedAddr, addr MsgBoxCaption, MB_OK 
invoke ExitProcess, NULL 
end start 

編集:MsgBoxTextの最初の10文字が 'm'であることが予想されます。代わりに、最初の文字だけが 'm'です。 incのMsgBoxTextはポインタをインクリメントすると仮定します。

+0

が予想される出力は何であり、あなたが代わりに何を見ていますか? – Maz

+0

@マーズ:それを指摘していただきありがとうございます、あなたの質問に答えるために投稿を更新しました。 – returneax

答えて

1

は一見それは「」、その後、単一の「M」に「にW」のWin32のを変更除いて何もしないはずです。このコードのように思えます。

各ループ反復で同じ単語であるMsgBoxTextにあるメモリ内の単語を増やしています。

「がM」文字を用いて文字列を壊しには、より良い戦略は、レジスタに文字列のアドレスをロードする「M」のバイトを格納する起動し、レジスタの値をインクリメントとしてすることであろうカウンターを減分するだけでなく

更新: [OK]を、にループを変更、コメントでの質問に答えるために:

lea esi, MsgBoxText 
    mov bl, 'm' 
lab: 
    mov [esi], bl 
    inc esi 
    cmp eax, 0 
    dec eax 
    jnz lab 
+0

これのコード例は何ですか?これは、文字通り、MASMで私の最初の練習です。 – returneax

+0

更新された回答を見る... – DigitalRoss