2011-01-17 5 views
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 

당신이 어떤이 있습니까 이 코드를 수정하는 방법 아이디어?

... 
cmp ah, 0 
jne noteq 
inc p 
noteq: 
inc si 
cmp si, 11 
jne again 

답변

0

방법 중 하나는 바로 cmp ah, 0 점프 아래 inc p을하고 그들이 동일하지 않은 경우에만 뛰어하는 것 eq 레이블 현재 마지막 반복이 ah! = 0 분기로 끝나면 eq 레이블로 넘어 가서 si을 12로 증가시키고 again 레이블로 다시 이동합니다. 또한 inc p 만 건너 뛰도록 코드를 재구성 할 수 있으므로 두 경우 모두 동일한 si 비교를 사용합니다 (의사 코드와 유사).

짝수/홀수 만 확인하려는 경우 가장 낮은 비트를 테스트하는 것이 더 간단한 방법입니다.

0

기술적으로는, 당신이 누락 것은 직전 마지막에 점프입니다 :