1

68000 アセンブリの「S[cc]」命令セットを理解しようとしています。

命令の形式は次のとおりです。

S[cc] reg

[cc]条件コードです (たとえば、SEQ「等しい場合に設定」を意味します)。で指定された条件[cc]が真の場合、レジスタはすべて1s に設定されます。それ以外の場合、レジスタはすべて0s に設定されます。

理解できないことが 1 つありS[cc]ます。条件が true かどうかを確認する操作はどこにあるのでしょうか。フラグをチェックしますか?

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)

私は68k ASMについて最初に知りません。;-)

于 2014-07-30T11:05:10.523 に答える
1

s[cc]また、これは最下位バイトにのみ影響することも指摘しておきます (たとえば、 を実行するとst d0d0になります。これは$xxxxxxFFxxレジスタにあったものになります)。さらに、条件が真の場合、バイトは$FFではなくに設定され1ます。誤った状況ではクリアされます。

于 2015-08-14T21:13:57.923 に答える
1

Motorola の68K Programmer's Reference Manual (1992)を参照してください。

3-23に答えを示します。条件コードは、ステータス レジスタのビットをチェックします。ステータスレジスタはコンペア動作だけでセットされるわけではありません。ステータス レジスタへの影響の詳細については、他のニーモニックを参照してください。

于 2014-07-30T11:05:59.817 に答える