0

次の疑似コード (アセンブリ 8086 へ) のジャンプを整理できません。

array = ...numbers set...
cl = 2
num = 0
si = 0
while(si != 11)
{
   ax = 0
   al = array[si]

   // divide with assembly
   div cl
   if(ah = 0)
   {
      n+1
   }
   si+1
}

私はそのようなことを試しました:

.data
array db 0Fh, 45h, 0A1h, 78h, 0CFh, 0AAh, 8Fh, 19h ; Array
p db 0 ; Number of even numbers in the array
.code
xor si, si
xor cx, cx
mov cl, 2
again:
xor ax, ax 
mov al, array[si]
div cl
cmp ah, 0
je eq
inc si
cmp si, 11
jne again
eq:
inc p
inc si
cmp si, 11
jne again

このコードを修正する方法はありますか?

4

2 に答える 2

0

1つの方法はinc p、ジャンプの下で右を実行し、cmp ah, 0それらが等しくない場合にのみジャンプすることです:

...
cmp ah, 0
jne noteq
inc p
noteq:
inc si
cmp si, 11
jne again
于 2011-01-17T19:12:17.877 に答える
0

eq技術的には、あなたが見逃しているのは、ラベルの直前の最後へのジャンプです。現在、最後の反復がah!=0 ブランチで終了した場合、ラベルまでフォールスルーし、12eqに増やしてラベルに戻ります。のみがジャンプされるようにコードを再編成することもできるため、両方のケースで同じ比較が使用されます (疑似コードと同様)。siagaininc psi

偶数/奇数のみをチェックしたい場合は、最下位ビットをテストするだけの方が簡単な方法です。

于 2011-01-17T19:13:48.470 に答える