2011-02-17 5 views
0

그는 이러한 질문을했습니다 a. 13은 분명히 샘플 세트에서 가장 큰 데이터 조각입니다. 13이 D0에 저장된 후 CCR의 상태는 다른 번호가 비교 될 때 무엇입니까 (단지 5 비트를주고 어떤 비트가 트리거되었는지 나타냄). b. 마지막 데이터 조각 (0)이 D1 레지스터로 옮겨진 후 CCR의 상태는 어떻습니까?어셈블리 언어 ccr 문제 학습 어셈블리

*  

ORG $400 
MOVEA.L #DATA,A0 
CLR.B D0 
NEXT MOVE.B (A0),D1 
BEQ EXIT 
CMP.B D0,D1 
BLE EndTest 
MOVE.B D1,D0 
EndTest ADDA.L #1,A0 
BRA NEXT  
EXIT STOP #$2700 
*   
ORG $1000 
Data DC.B 12,13,5,6,4,8,4,10,0  
END $400  

내가 편집했지만 easy68k에서는 5 비트가 표시되지 않습니다. 나는 ccr이 깃발 비트로 만들어졌지만 나는 무엇을해야할지 모르겠다.

char *byte = data; 
char cur, max = 0; 

while ((cur = *byte++)) 
    if (cur > max) max = cur; 

즉 :

답변

1

이 루프는 다음의 C 코드에 해당 루프는 항상 모든 값을 반복하고 마지막에 0을 찾으면 종료됩니다. 즉, EXIT에 도달 할 때까지 BEQ EXIT 수표를 통해 이전로드 결과를 테스트 한 결과 0으로 계산되었습니다. CCR은 0x04 일 수 있고, 즉 Z 만 제로 플래그가 설정되며, 이는 BEQ이 확인합니다.

BLE 테스트가 진행되는 한, 이것은 플래그에 대한 복잡한 검사입니다. Motorola's 68k reference manual, 표 3.19에 따르면 Z || (N && !V) || (!N && V), 즉 N/V 또는 0 (이는 = 부분)의 상호 배타성을 테스트합니다. 따라서 여러 가지 플래그 조합이 해당 분기를 가져올 수 있습니다. 특정 데이터에 대해서는 이전 값이 12 인 경우 N으로 설정되어 있다고 가정합니다. 즉, CCR 값이 0x??08입니다 (대부분의 CPU에서 CMP은 빼기와 함께 빼기 처리를하고, 12-13은 부정).

m68k 어셈블리와 관련하여 this wikibook은 좋은 소개입니다. 조건부 분기/CCR 플래그 테스트를 설명하지만 위의 까다로운 비트는 제외합니다 ...