我有幾個例子,除了LABEL概念外,都非常簡單。 示例1本身增加25 10次,而示例2取補充寄存器A 700次。彙編語言中的「標籤」
Example-1: MOV A,#0
MOV R2,#10
AGAIN: ADD A,#25
DJNZ R2,AGAIN
MOV R5,A
Example-2:
MOV A,#55H
MOV R3,#10
NEXT: MOV R2,#70
AGAIN: CPL A
DJNZ R2,AGAIN
DJNZ R3,NEXT
我無法理解LABEL的概念。在示例1中,當第一次運行程序時,A的值爲25,然後當R2從10遞減到1時,輸出爲275而不是250.但是如果我假設LABEL被繞過,除非它被調用,那麼事情就可以了我得到的結果是250.但是如果我在例2中假設同樣的事情(繞過LABEL逐步執行),那麼LABEL NEXT將被繞過。並且「DJNZ R2,AGAIN」將被執行。由於NEXT被繞過,R2將如何獲得#70的價值?所以我的問題是關於LABEL的執行。標籤是被執行還是被繞過?
「LABEL」是一種東西,所以你不必手動計算出跳轉到的地址。它不是*指令並且不佔用空間(除了彙編程序可能使代碼對齊以使其有效)。 – user2864740 2014-09-12 10:04:20
一個標籤不是你繞過或不是 - 它只是下面的指令所在的地址的符號名稱。您可以在每條線的前面添加一個標籤,而不會產生任何影響 - 除非您實際使用它來跳轉或調用它。 – 2014-09-12 10:05:23
對。然後在Example-1中,當第一次程序運行時,Add命令給A加25,而當10次DJNZ在A中加25時它應該是275.但是在例子中答案是250。那是怎麼回事? – 2014-09-12 10:10:52