問題タブ [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.
assembly - ARMのMOV命令は、2番目のオペランドとして多数を使用してどのように機能しますか?
ARMアセンブリ言語の勉強を始めたばかりですが、MOVを使用してイミディエート番号をレジスタに転送する方法がわかりません。
ARMリファレンスマニュアルと私の教科書の両方から、MOV命令の直後の数の範囲は0から255であると言われています。しかし、ADS 1.2 IDEで自分のPCでテストすると、指示
うまく機能します。番号0xFFFFFFFFは仕様の範囲外ではありませんか?
assembly - MUL 命令は即値をサポートしていません
MUL
いくつかのチュートリアルと例を読みましたが、命令がどのように機能するかについて頭を悩ませることはできません。使っていて問題ADD
ありませんSUB
。したがって、明らかに、この命令はオペランドにレジスタの値を乗算します。
第 1 オペランドで乗算されるレジスタ (eax、ebp、esp など) は何ですか? 結果はどのレジスタに格納されるので、スタックに移動できますか? 申し訳ありませんが、私はちょうど x86 アセンブリを学んでいます。
この行をコンパイルしようとすると...
わかりましたError: suffix or operands invalid for 'mul'
。誰でも私を助けることができますか?
assembly - x86でAT&T構文を使用して長いレジスタにイミディエートバイトを追加するにはどうすればよいですか?
Intelのマニュアルを読んで理解していることから、次のような命令を記述できるはずであり、合計3バイトadd $0x7f, %ebx
としてエンコードされている必要があります。83 /0 ib
ただし、これを行うと(、、、またはを使用するかどうかに関係なくadd
)addb
、addl
常に即値を32ビット値に「プロモート」し、81 /0 id
6バイトとしてエンコードして使用します。adc
、などにも同じ問題がありsub
ます。GNUでAT&T構文を使用していることに注意してくださいas
。
私は1日以上解決策を探していましたが、見つかりませんでした。誰かアドバイスしてもらえますか?
assembly - フィックスアップ後の無効な定数?
何らかの理由で、このコードをコンパイルしようとすると、コンパイラは次のように言いますsyscall.s:72:invalid constant (0x172) after fixup
。
なぜそれをしているのかわからない。に小さい定数を入れると、r7
うまくいきます。しかし、数値が高いと、このエラーが吐き出されます。mov r7, #300
とを実行して一時的に修正しましたadd r7, #70
。これにより、目的の効果が得られます。ただし、エラーの原因はまだわかりません。
assembly - DC.W (定数の定義) で数値の前に # が必要ないのはなぜですか?
次のコード行があります。
これは基本的に意味しX = 5
ますが、すべきではありませんX DC.W #5
か?
MOVEを使用するときは常に必要です#
assembly - ARM アセンブリで LDR over MOV (またはその逆) を使用するのはなぜですか?
私はこのチュートリアルを見ています: http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/ok01.html
組み立ての最初の行は次のとおりです。
2番目は次のとおりです。
ldr
メモリからレジスタに値をロードするためだと思いました。しかし=
、0x20200000はメモリアドレスではなく値であることを意味しているようです。どちらの行も絶対値をロードしているようです。
assembly - ATT アセンブリの理解 (即時)
次の組立ラインがあるとしましょう
%edi/%edx レジスタに格納しているのは正確には何ですか。
基本的に、このコードを C プログラムに変換するとしたら、いくつかの変数を -1 と 1 に初期化することになります。
即時=「一定の定数」は理解していますが、それはどういう意味ですか?
c++ - 腕の動きに有効な imm num を取得する簡単な方法は?
Arm mov には、即値が 2 の倍数で回転された 8 ビットでなければならないという制限があります。次のように記述できます。
しかし、次のように書くことはできません。
0x5000 は 0x5000 + 1 として分割できます。私の意味では、有効な即値と小さな数の合計です。
では、与えられた 32 ビットの数値について、最も近い有効な即値をすばやく見つけるにはどうすればよいでしょうか? このような:
assembly - 腕の即値をエンコードする方法は?
次のような inst があるとします。
マシンコードは
05 CA 8C E2
と
しかし、0x5000 がわかっている場合、どうすれば 101000000101 を取得できるでしょうか? この逆変換は1対1対応ですか?ありがとう。
assembly - at&tアセンブリ構文で$記号を使用する場合と使用しない場合の数値の違いは何ですか?
.data セクションに次の項目があるとします。
そしてコードでは、
$記号を使用すると定数になると思いますので、%eaxにはメモリアドレスがありますが、%ebxはどうですか?
2つの命令の正確な違いは何ですか?