[英]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.