1

我试图理解 68000 程序集中的“S[cc]”指令集。

指令的格式是这样的:

S[cc] reg

[cc]是条件代码(例如,SEQ表示“如果等于则设置”)。如果 指定的条件[cc]为真,则寄存器设置为所有1s。否则,寄存器设置为所有0s。

有一件事我不明白: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.

这个对吗?还是我没有正确理解这个操作?

4

4 回答 4

5

是的,它会检查标志,这在查看助记符时应该很明显:

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-Reference第 51 页。我不知道关于 68k ASM 的第一件事。;-)

于 2014-07-30T11:05:10.523 回答
1

查看摩托罗拉的68K 程序员参考手册(1992)

3-23给出了答案:条件代码检查状态寄存器中的位。状态寄存器不仅通过比较操作设置。有关它们如何影响状态寄存器的详细信息,请参阅其他助记符。

于 2014-07-30T11:05:59.817 回答
1

我还想指出,s[cc]这只影响最低有效字节(例如,如果你这样做st d0d0将是$xxxxxxFFxx这意味着这将是寄存器上的任何内容)。此外,在条件为真的情况下,字节将设置为$FF而不是1。在错误的情况下,它将被清除。

于 2015-08-14T21:13:57.923 回答
0

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,destthen SCS。如果值已签名,但您想要相同的测试(即src >= dest),请使用SLT

您可以使用该TST指令将值与零进行比较,尽管在许多情况下这是自动完成的(例如MOVE,还会同时进行测试)

        TST     dest

dest == 0       EQ
dest != 0       NE
dest <  0       MI
dest >= 0       PL
于 2014-09-24T20:04:49.990 回答