1

私のプログラムはループに陥っています。誰でもその理由を理解できますか?

基本的に、ループする回数を決定するためにユーザー入力を取得し、ユーザーが目的の値 (正または負の数値) を入力したいと考えています。次に、それらは 0 と比較されます。数値が正の場合は正のスタック アドレスに追加し、負の場合はそれを負のスタック アドレスに置き、結果を出力します。

  mov ecx, loopvalue

l1:
  push ecx
  lea eax, getvalue 
  push eax 
  call printf 
  add esp, 4 
  lea eax, uservalue 
  push eax 

  lea eax,format 
  push eax
  call scanf_s 
  add esp, 4 
  pop ecx
  loop l1
4

1 に答える 1

0

スタックに 2 つの引数を指定していますscanf_sが、呼び出し後にスタックの両方の引数を解放していません (4 つだけ追加しています)。これを修正するには、代わりに 8 を追加する必要があります。

lea eax, uservalue 
push eax 

lea eax,format 
push eax
call scanf_s 
add esp, 8
于 2013-11-08T12:08:55.150 に答える