理解68000装配的“S [cc]”指令

时间:2014-07-30 10:56:10

标签: assembly 68000

我试图理解" S [cc]" 68000汇编中的一套说明。

指令的格式是:

S[cc] reg

[cc]是条件代码(例如,SEQ表示"如果等于"则设置。如果[cc]指定的条件为真,则寄存器设置为所有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.

这是对的吗?或者我不能正确理解这个操作?

4 个答案:

答案 0 :(得分: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的第一件事。 ; - )

答案 1 :(得分:1)

看一下摩托罗拉的68K Programmer's Reference Manual(1992)

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

答案 2 :(得分: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,dest,然后SCS。如果值已签名,但您想要进行相同的测试(src >= dest),请使用SLT

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

        TST     dest

dest == 0       EQ
dest != 0       NE
dest <  0       MI
dest >= 0       PL

答案 3 :(得分:0)

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