Re: xor cx, cx
In article <e0r2s6$umh$1@bluegill.lbm.go.jp>,
toda@lbm.go.jp writes:
> In article <squy7ymc2ha.fsf@stellar.co.jp> manmos@stellar.co.jp writes:
> >> mov cx, 0
> >> でも同じ(同じ結果を得るためのコードとしてはどちらでも間違いではない)と
> >> 考えていいのでしょうか?
> >いろんなCPUがありますので、一概にいえませんが、前者の場合間違いなく
> >zero flagがセットされるはずですが、後者の場合どうなるかはCPUによるでしょう。
> うーむ、フラグの状態が違うという問題があるのは失念してました。
> (x86のmovはフラグを変化させないハズ)
最近x86でアセンブラやってないので、明確にはいえなかったのですが、その
ような記憶があるような…
> しかし、
> >> 例えば、CX レジスタを全部 0 で埋める場合、
> という目的だったら、その段階でフラグがどうなってようと
> 関係ないことの方が多いような気も……
ただ、アセンブラと高級言語の大きな差が、演算によって、目的のレジスタ/
メモリだけでなくフラグも変わるいうのがあると思うのです。今回zero store
の話が出てきたのですが、アセンブラでプログラムを組む時には、遅延のため
にnopを入れる時でも、mov(ldかも?) とかでflagの変わるcpuでmov a,aをnop
の代わりに入れたりすると、エライ目に合う可能性も捨て切れないわけで、
(x86のnopってもともとmov命令だったりしなかったっけ?)どの命令がどうい
う結果でフラグを変えることを知っておくのはとても重要です。
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735