問題タブ [immediate-operand]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5910 参照

assembly - ARMv8 A64 アセンブリの即値の範囲

私の理解では、ARMv8 A64 アセンブリの即時パラメーターは 12 ビット長になる可能性があります。その場合、なぜこのアセンブリ コード行は次のようになりますか。

このエラーを生成します (gcc でコンパイルした場合)

興味深いことに、次のアセンブリ コード行は正常にコンパイルされます。

aarch64-linux-gnu-gcc (Linaro GCC 2014.11) 4.9.3 (プレリリース) を使用しています

0 投票する
1 に答える
464 参照

assembly - 特定の数値がARMで32ビット即値として表現できることを知る方法は?

数値 x が与えられた場合、それが 32 ビットの即値として表現できることをどのように判断できますか。何らかの式は存在しますか?はいの場合、その式は網羅的ですか、つまり、考えられるすべてのケースをカバーしていますか? ARM は、命令セットの右端の 12 ビットを 4 ビットのローテート ビットと 8 ビットの値ビットに分解します。

0 投票する
1 に答える
26398 参照

assembly - addi の代わりに addiu を使用するのはなぜですか?

MIPS アセンブリでは、addiuoverを使用する利点は何addiですか? 署名されていませんaddiu(そして、計算が台無しになりますか?)

0 投票する
0 に答える
12442 参照

assembly - MIPS アセンブリの「addi」命令で、16 進数の即値はどのように解釈されますか?

addi16 進数の即値が使用されている場合、アセンブリで命令 (およびその他) を解釈する方法に関する標準または推奨事項はありますか?

例:

これは、プロセッサによって行われるように、符号が に拡張されるのと同じ意味になると予想していましaddi $t0, $zero, -1たが、火星シミュレータのアセンブラが 16 進数を 32 ビットの符号なし数値として解釈し、疑似数値として実行しようとするという事実に驚きました。命令 (疑似命令が有効な場合)。0xffff0xffffffffaddi $t0, $zero, 0x0000ffff

明確にするために、MARS のアセンブラーはそのaddi $t0, $zero, 0xffff疑似命令を複数のマシン命令にアセンブルし、疑似命令が有効になっている場合は、その定数 (65535 = 0xffff) をレジスタに作成し、それを追加します。MARS のシミュレーターは( ) のような命令を正しくシミュレートします。0x2008ffffaddi $t0, $zero, -1

SPIM アセンブラは、エラーで中断します。

私が知りたいのは、アセンブラーが常にこのように解釈するかどうか、および何も見つからないので、これが記述または説明されている場所があるかどうかです。

0 投票する
3 に答える
17151 参照

assembly - アーム アセンブリのレジスタに 32 ビット値をロードする

アーム アセンブリを使用して、1 つの 32 ビット 16 進数をレジスタに直接ロードしたいと考えています。

この命令からロードできるのは 8 ビット値のみであるため、これは使用できません。そのため、メモリから直接 32 ビット値をロードしました。では、32 ビット値をメモリに格納し、アーム アセンブリを使用してレジスタに直接ロードするにはどうすればよいでしょうか?

このコードを試しました。

しかし、次のエラーが発生します。

0 投票する
3 に答える
10252 参照

assembly - 負の即値定数を持つ MIPS の andi 命令と addi 命令

$t2= と仮定0x55555550して、次の命令を実行します。

$t2 は0x0005550

これは MIPS エミュレーター1で確認されています。

しかし、それは私が期待したものではありません。答えは 0x55555550 & 0xFFFFFFFF = 0x55555550 であるべきだと思います。and ロジックの前に、定数 -1 が 0xFFFFFFFF に符号拡張されたと思います。しかし、答えは 0x55555550 & 0x0000FFFF だったようです

-1 が 0xFFFFFFFF ではなく 0x0000FFFF に符号拡張される理由


脚注 1: 編集者注: 「拡張疑似命令」が有効になっている MARS は、これを複数の命令に展開し0xffffffffて tmp レジスタに生成するため、変更され$t2ません。そうしないと、MARS と SPIM の両方が、エンコードできないとしてエラーで拒否します。他のアセンブラは異なる場合があります。

0 投票する
1 に答える
16078 参照

assembly - x86-64 での movq と movabsq の違い

私はここの初心者で、アセンブリ言語の勉強を始めたばかりです。間違っている場合は訂正してください。または、この投稿が意味をなさない場合は削除します。

x86-64 Intel アーキテクチャのデータ移動命令について話しています。通常のmovq命令は、32 ビットの 2 の補数として表すことができる即値ソース オペランドのみを持つことができますが、movabsq命令は任意の 64 ビット即値をソース オペランドとして持つことができ、宛先としてレジスタのみを持つことができることを読みました。 .

これについて詳しく教えてください。movabsq命令だけで64ビットの即値を移動できるということですか?そして、即値からレジスターまでのみですか?64 ビットの即値をメモリに移動する方法がわかりません。それとも、ここで何か重要なことを間違えたのかもしれません。

0 投票する
1 に答える
2511 参照

assembly - 次の機械語コード (0x2237FFF1) を MIPS アセンブリに変換します。

私はこれまでこのコードを翻訳しましたが、理解していないのは、16 ビットの即値アドレスの量を把握 (計算) する方法です。

バイナリへ

今、私はオペコード (001000) を読んでいて、それが I タイプで addi命令であることを知っています。

今、バイナリを I タイプの命令にグループ化しています

MIPSリファレンスシートを見て、命令が

私はここでスタックしていますが、一般的に16ビットの即値アドレスを決定する方法がわかりません。