![](/img/trans.png)
[英]Assembly Language (68000)- Sorting MOVE instructions according to their speed
[英]Understanding the “S[cc]” instructions of 68000 assembly
我試圖了解68000匯編中的“ S [cc]”指令集。
指令的格式為:
S[cc] reg
[cc]
是條件代碼(例如, SEQ
意思是“等於則設置”)。 如果[cc]
指定的條件為true,則將寄存器設置為全1
s。 否則,寄存器設置為全0
s。
我不了解一件事: S[cc]
操作在哪里檢查條件是否成立? 它會檢查標志嗎?
如果是這樣,則比我要讓寄存器D0
保留表達式D0 = D1
的結果要多,這是我需要做的:
CMP D0,D1 ; this sets the flags according to the result
SEQ D0 ; sets D0 to true if the flags indicate the condition is true. else, sets it to false.
這個對嗎? 還是我不能正確理解此操作?
是的,它會檢查標志,當查看助記符時,這些標志應顯而易見:
SCC set on carry clear (!C)
SCS set on carry set (C)
SEQ set on equal (Z)
SGE set on greater than or equal (N.V + !N.!V)
SGT set on greater than (N.V.!Z + !N.!V.!Z)
SHI set on higher than (!C.!Z)
SLE set on less than or equal (Z + N.!V + !N.V)
SLS set on lower than or same (C + Z)
SLT set on less than (N.!V + !N.V)
SMI set on minus (i.e., negative) (N)
SNE set on not equal (!Z)
SPL set on plus (i.e., positive) (!N)
SVC set on overflow clear (!V)
SVS set on overflow set (V)
SF set on false (i.e., set never) (0)
ST set on true (i.e., set always) (1)
取自http://de.scribd.com/doc/418461/Easy-Motorola-68k-參考第51頁。我不了解68k ASM的第一件事。 ;-)
看看Motorola的68K程序員參考手冊 (1992)
表3-23
為您提供了答案:條件代碼檢查狀態寄存器中的位。 狀態寄存器不僅可以通過比較操作進行設置。 有關它們如何影響狀態寄存器的詳細信息,請參見其他助記符。
S<cc>
確實檢查條件標志。 您可能會喜歡此簡單指南,了解如何使用CMP
指令根據自己的喜好設置標志:
CMP src, dest
dest < src LT CS src >= dest ; CS = LO
dest <= src LE LS src >= dest
dest == src EQ EQ src == dest
dest != src NE NE src != dest
dest > src GT HI src <= dest
dest >= src GE CC src <= dest ; CC = HE
signed ---^ ^--- unsigned
例如,如果要檢查無符號值src
大於或等於dest
,請使用CMP src,dest
然后使用SCS
。 如果值是帶符號的,但是您想要相同的測試( src >= dest
),請使用SLT
您可以使用TST
指令將值與零進行比較,盡管在很多情況下,此操作是自動完成的(例如, MOVE
也將同時進行測試)
TST dest
dest == 0 EQ
dest != 0 NE
dest < 0 MI
dest >= 0 PL
我還要指出, s[cc]
僅影響最低有效字節(例如,如果您執行st d0
,則d0
將為$xxxxxxFF
, xx
表示這將是寄存器上的所有內容)。 此外,在條件為真的情況下,字節將設置為$FF
而不是1
。 在錯誤的情況下,它將被清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.