2011-06-24 10 views
-1

2つの文字列を比較するために次のコードを記述しました.1つはあらかじめ定義されていて、もう1つはユーザーからの入力として扱われます。しかし、プログラムは毎回不平等であると示しています。私を助けてください。私はMASM32アセンブラを使用しています。MASM32文字列コンパイル

.data 
msg1 db '***Welcome to My Program***',13,10,0 
msg2 db 'Please Enter a Product: ',0 
msg3 db 'You Entered Shoes: ',0 
p1 db 'Shoes',0 

.data? 
product db 100 dup(?) 
.code 

start: 
invoke StdOut,ADDR msg1 
invoke StdOut,ADDR msg2 
invoke StdIn,ADDR product,100 ; receive text input 

lea esi, p1   ; Load the buffer start address 
lea edi, product  ; Load the save buffer start address 
mov ecx, 10   ; Load the operation count 
repe cmpsb   ; Compare the byte into the buffer 
jne Terminate 
invoke StdOut,ADDR msg3 

Terminate: 
invoke ExitProcess,0 
END start 

答えて

1

は、私が手にMASM32の参照を持っていないが、メモリからSTDINもコンソールに入力し、それはあなたが読んで、変数に反映されます打つからキャリッジリターン+ラインフィードがかかります。

MASM32にはStripLFという名前の関数が組み込まれています。それ以降は比較が成功するはずです。

このような問題については、コードをステップ実行してメモリダンプとスタックを確認できるOllyDbgを強くお勧めします。

編集:http://www.masm32.com/board/index.php?PHPSESSID=b98a1a56c52fdc4c07a2bca3553302e2&topic=51.0

+0

クイック答えを、と非常に正しい:ちょうど私が(STDINの指定された行動上のハッチのコメントが、バグレポートだという事実を無視して)記述しています正確に何を実証MASM32フォーラムのスレッドを発見しました! – Perception

+0

あなたの返事ありがとうございますが、私はもっと多くのことを学ぶ時間がありません。誰かがこのコードを修正して動作するように教えてください! – Azeem

+0

do:比較の前に 'プッシュオフセット製品' 'call StripLF' ... –

関連する問題