• ベストアンサー

アセンブラで教えてください

富士通のFRマイコンをつかってます。 演算結果で分岐するようにしたいのですが、うまくいきません。 R1にいれたFFから、-1引いて、Z=1になったら, STRARTに飛びたいのですが、Aにしか飛んでいないようです どこがまずいでしょうか? その前の命令(NOP)が長すぎると計算できないことはありますか? ; START: LDI:32 #000000FFH,R1 A: NOP (NOPは1000行) NOP ・ ・ ADD2 #-1,R1 BNE A BRA START ; END:

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ANo.1 です。 >R1にいれたFFから、-1引いて、Z=1になったら, というのは、 >ADD2 #-1,R1 の結果が zero ならば、ということですよね? towa2005 さんのやろうとしていることが、-1 - (-1) であるのならば、 >LDI:32 #000000FFH,R1 ではなく、 LDI:32 #FFFFFFFFH,R1 とするべきなのでしょうね。

towa2005
質問者

お礼

たびたびお世話になります。 すいません、書き方が悪かったです。”-1引いて”ではなくて 1引いての間違いでした・ R1にFFを代入し、そこから、1を引いていって、演算結果がゼロになったら(Z=1),STARTにもどりたいです すいませんが、よろしくおねがいします

その他の回答 (4)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

BRAも分岐条件がないだけの相対ジャンプですので範囲はBNEと同じです -128~+127(の2倍?)以上の分岐は出来ません

towa2005
質問者

お礼

そうですね。修正して見ます。 ありがとうございました

回答No.4

ANo.1 です。誤解をしていたようです。 For ループを書きたいのですね? A にしか飛んでいないということは確実なのでしょうか? ANo.2 さんの回答された内容が問題になってくる可能性が高いですね。 NOP が 1000 個というのは符号付き 8 ビットの範囲を超えています。 ・相対アドレスでジャンプするのではなく、絶対アドレスでジャンプする ・NOP の個数を減らして試してみる。 などを試してみてはいかがでしょうか。

towa2005
質問者

お礼

そうですね。nopが1000個はちょっと多かったです。 もう少し考えて見ます。ありがとございました

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

http://edevice.fujitsu.com/jp/manual/MANUALp/ja-pdf/CM71-00101-4.pdf の175ページを見るとBNE等の相対ジャンプ範囲は符号付き8ビットのようです。 NOPが長すぎると届かなくなりますね。

towa2005
質問者

お礼

BNEは理解しました。修正して飛ぶようになりましたが、 Z=1の分岐先には飛びません。 NOPが長いとゼロにならないとかあるんでしょうか?

回答No.1

>富士通のFRマイコンをつかってます。 これの仕様はわからないのですが、 もし、すべて 32 ビットで処理をしているのなら、 >R1にいれたFFから、-1引いて、Z=1になったら, この計算は zero にはならないはずです。 ここが問題なのではないでしょうか。

towa2005
質問者

お礼

すいません、どうすればゼロになりますでしょうか? 減算しても最終的にゼロにはならないんですか?

関連するQ&A