2011-02-17 113 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是由標誌位組成的,但我不知道該怎麼做。

回答

1

該循環是等同於以下的C代碼:

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

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

即循環將始終遍歷所有值,並在最後找到零時終止。這意味着當你點擊EXIT時,你已經通過了BEQ EXIT檢查,檢查之前的負載的結果,發現它爲零。 CCR將是0x014,即只有Z,0標誌設置,因爲這是BEQ檢查的內容。

只要BLE測試去,這是一個複雜的檢查標誌;根據Motorola's 68k reference manual,表3.19,它測試Z || (N && !V) || (!N && V),即對於N/V或零(這將是等於部分)的相互排他性,因此標誌的若干組合可能導致該分支被採用。對於您的具體數據,我會假設,鑑於之前的值爲12,您將最終設置爲N,即CCR值爲0x??08CMP在大多數CPU上都會減去丟棄值,而12-13是負)。

關於m68k大會,this wikibook是一個很好的介紹。它描述了條件分支/ CCR標誌測試,但是省略了上面的棘手的位...