[解決済み] ARMアセンブラ - CMP、BLT、BGTはどのように使用するのですか?
2022-02-28 03:55:02
質問
ループの中でCMP、BLT、BGTを使用して値を比較する必要があります。次のループでは、これらの命令をどのように使用するのでしょうか?
BGT、BLT、CMPをアプリケーションを動作させるために必要なので、使おうとしています。問題は、それらをどのように使用するのかがわからないことです。CMPを使用してr6とr4を比較し、その差をr7に格納したい場合、どのようにすればよいのでしょうか?同じ質問で、r7が0より小さい場合にBLTを使いたい場合、どのようにすればいいのでしょうか?
BGT ??????? ; branch if greater than 5
CMP ???????? ; compare r6 with r4 , put difference into r7
BLT ???????? ;branch if r7 is less than 0
BGT ???????? ;branch if r7 is greater than 0
これが私のループ全体です。
LoopStart
BL WaitBUT1
BL readTemp
BL checkTemp
BGT ??????? ; branch if greater than 5
BL errorVal
CMP ???????? ; compare r6 with r4 , put difference into r7
BLT ???????? ;branch if r7 is less than 0
BL FanOn
BL errorLedOn
BL systemLedOn
BL heaterOn
BGT ???????? ;branch if r7 is greater than 0
BL FanOff
BL errorLedOff
BL systemLedOff
BL heaterOff
BL WaitBUT2
BL FanOff
BL errorLedOff
BL systemLedOff
BL heaterOff
B LoopStart
解決方法は?
条件分岐を行うには、まず何らかの方法で条件レジスタを設定する必要があります。これを実現するのが
cmp
を追加するか、あるいは
s
をほとんどの命令で使用することができます。詳しくはARMのアセンブリドキュメントを確認してください。簡単な例です。
分岐 if
r0
が5より大きい場合。
cmp r0, #5 ;Performs r0-5 and sets condition register
bgt label_foo ;Branches to label_foo if condition register is set to GT
比較する
r6
と
r4
に、その差を
r7
の場合、分岐します。
r7 < 0
:
subs r7, r6, r4 ;Performs r7 = r6 - r4 and sets condition register
blt label_bar ;Branches to label_bar if r7 < 0 (in which case r6 < r4)
関連
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] テスト
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] gccでC/C++のソースからアセンブラ出力を得るにはどうしたらいいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み】配列型char[]が代入できない [重複]。