[解決済み] Lc3分割のしくみ
2022-02-05 17:24:22
質問
Iveは引き算による除算がどのように機能するかを理解しようとしたが、それを明確にするオンラインリソースがない。また、サブルーチンの構文がどのように見えるかの良い例も必要です。
どのように解決するのですか?
LC3では、2つの方法で割り算に取り組むことができます。もし引き算で割り算をする例を探しているなら、この投稿を見てください。
でも、減算方式でなくてもいいなら、左へ15ビットシフトするのがおすすめです。実行時間が少なくて済みますし、ビットシフトしたい数に速度が影響されないので効率的です。
以下のコードは、15ビットシフトを使用して、右ビットシフトを行う方法を示しています。
.ORIG x3000
LD R0, VALUE
SHIFT_RIGHT
AND R2, R2, #0 ; Clear R2, used as the loop counter
SR_LOOP
ADD R3, R2, #-15 ; check to see how many times we've looped
BRzp SR_END ; If R2 - 15 = 0 then exit
LD R3, BIT_15 ; load BIT_15 into R3
AND R3, R3, R0 ; check to see if we'll have a carry
BRz #3 ; If no carry, skip the next 3 lines
ADD R0, R0, R0 ; bit shift left once
ADD R0, R0, #1 ; add 1 for the carry
BRnzp #1 ; skip the next line of code
ADD R0, R0, R0 ; bit shift left
ADD R2, R2, #1 ; increment our loop counter
BRnzp SR_LOOP ; start the loop over again
SR_END
ST R0, ANSWER ; we've finished looping 15 times, store R0
HALT
BIT_15 .FILL b1000000000000000
VALUE .FILL x3BBC ; some random number we want to bit shift right
ANSWER .BLKW 1
.END
関連
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] cmplとcmpの違いについて
-
[解決済み] なぜSet on Less ThanはALU演算なのか?
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] 1サイクルあたり4FLOPの理論上の最大値を達成するにはどうすればよいですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
-
[解決済み] milw0rm ヒープスプレイングエクスプロイトの仕組みは?
-
[解決済み] コールスタックはどのように機能するのか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Nasmエラー:オペコードとオペランドの無効な組み合わせ
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] WAWハザードとは?
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] ARMはSDIVとUDIVを区別していますが、ADD、SUB、MULでは区別していないのはなぜですか?
-
[解決済み] error: invalid effective address エラー:有効なアドレスがありません。
-
[解決済み] x86アセンブリで160x100モードを実現する
-
[解決済み] MIPSアセンブリ言語では、なぜ.globl mainを使うのですか?
-
[解決済み] MIPS:lw(ロードワード)命令
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?