- ベストアンサー
アセンブラで教えてください
富士通の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:
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1 です。 >R1にいれたFFから、-1引いて、Z=1になったら, というのは、 >ADD2 #-1,R1 の結果が zero ならば、ということですよね? towa2005 さんのやろうとしていることが、-1 - (-1) であるのならば、 >LDI:32 #000000FFH,R1 ではなく、 LDI:32 #FFFFFFFFH,R1 とするべきなのでしょうね。
その他の回答 (4)
- php504
- ベストアンサー率42% (926/2160)
BRAも分岐条件がないだけの相対ジャンプですので範囲はBNEと同じです -128~+127(の2倍?)以上の分岐は出来ません
お礼
そうですね。修正して見ます。 ありがとうございました
- irija_bari
- ベストアンサー率73% (70/95)
ANo.1 です。誤解をしていたようです。 For ループを書きたいのですね? A にしか飛んでいないということは確実なのでしょうか? ANo.2 さんの回答された内容が問題になってくる可能性が高いですね。 NOP が 1000 個というのは符号付き 8 ビットの範囲を超えています。 ・相対アドレスでジャンプするのではなく、絶対アドレスでジャンプする ・NOP の個数を減らして試してみる。 などを試してみてはいかがでしょうか。
お礼
そうですね。nopが1000個はちょっと多かったです。 もう少し考えて見ます。ありがとございました
- php504
- ベストアンサー率42% (926/2160)
http://edevice.fujitsu.com/jp/manual/MANUALp/ja-pdf/CM71-00101-4.pdf の175ページを見るとBNE等の相対ジャンプ範囲は符号付き8ビットのようです。 NOPが長すぎると届かなくなりますね。
お礼
BNEは理解しました。修正して飛ぶようになりましたが、 Z=1の分岐先には飛びません。 NOPが長いとゼロにならないとかあるんでしょうか?
- irija_bari
- ベストアンサー率73% (70/95)
>富士通のFRマイコンをつかってます。 これの仕様はわからないのですが、 もし、すべて 32 ビットで処理をしているのなら、 >R1にいれたFFから、-1引いて、Z=1になったら, この計算は zero にはならないはずです。 ここが問題なのではないでしょうか。
お礼
すいません、どうすればゼロになりますでしょうか? 減算しても最終的にゼロにはならないんですか?
お礼
たびたびお世話になります。 すいません、書き方が悪かったです。”-1引いて”ではなくて 1引いての間違いでした・ R1にFFを代入し、そこから、1を引いていって、演算結果がゼロになったら(Z=1),STARTにもどりたいです すいませんが、よろしくおねがいします