[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
2022-02-21 18:30:10
質問内容
MARIEアセンブリ言語を理解しようとしています。以下の点がよくわかりません。
skipcond
に対して
のようなことをする。
<
または
>
または乗算、除算。
この簡単なプログラムを取っています。
x = 1
while x < 10 do
x = x +1
endwhile;
わからないのは、あるスキップ条件の使い方です。
Skipcond 800 if AC > 0,
Skipcond 400 if AC = 0,
Skipcond 000 if AC < 0
さて、10 から x を引き、skipcond を使ってテストすることは分かっています。
どれがどうしてなのか、よくわかりません。もし、本当の仕組みを知っていたら、もっと簡単に理解できたかもしれません。なぜゼロと比較するために使われるのですか?
これは私が持っているものです。
100 load one
101 store x
102 subt ten
103 skipcond400 if x-10 = 0? // or skpcond000 x -10 < 0??
解決方法は?
while x < 10 do
x = x + 1
は x が 10 になるとすぐにループから飛び出します。xから10を引くと、xが10に等しくなるまで(値が0になるまで)負の値が得られます。そこで
skpcond000
というのは、あまりに早く飛び出してしまうので、間違っています。ですから
skpcond400
が正しい。
おそらく、C言語のコードを変更して、アセンブリのコードに近づけるとわかりやすいと思います。
Original: while (x < 10) do
Subtract 10: while ((x - 10) < 0) do
Use != instead of <: while ((x - 10) != 0) do
を増やさなければならないことにも注意してください。
x
後
と同じ挙動を再現するための条件です。
while
のループになります。
関連
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] x86 - C言語のsscanf関数
-
[解決済み] MIPS分岐実行順序(beqz)
-
[解決済み] BL命令ARM - その仕組み
-
[解決済み] ループ内で配列の個々の要素にアクセスするにはどうしたらよいですか?
-
ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました。
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?
-
[解決済み] ESPレジスタとEBPレジスタとは何ですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】テスト %eax %eax のポイント【重複あり
-
[解決済み】x86アセンブリ。AT&Tの構文で「subl」コマンドはどのように動作するのか
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] WAWハザードとは?
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] ARMアセンブリループ
-
[解決済み] アセンブリMIPS .ALIGNとメモリアドレスの理解
-
[解決済み] インテルアセンブリの%ripレジスタを理解する
-
[解決済み] LC3 LEA 命令と格納された値