問題タブ [zero-extension]
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 - 署名付き/未署名のロードおよびストア命令 (MIPS) に関する明確化
Google の助けを借りて教科書を手にしても、これらの概念を理解できないようです。
フォーマット(opcode、rs、rt、offset)に従って...
- アドレスの値に追加する前に、オフセットを符号拡張しますか? それとも拡張する前に追加しますか?
- lbとlbuの場合、違いは何ですか? また、「符号なし」はオーバーフローを報告しないことを意味するという MIPS 算術定義にも従っていますか?
- lwに署名されていないバージョンがないのはなぜですか? お店の説明書にも記載がない…
assembly - movzwl、%ax、および負の値による奇妙な結果
さて、私は次のコードスニペットを扱っています:
したがって、正の値を扱う場合、これは期待どおりに動作します。%edx にコピーされる値は、%eax (または %ax) の末尾の 16 ビットです。
ただし、負の数を入れると、すべてがおかしくなり始め、期待どおりに動作していないように見えます。
たとえば、%eax の値が -67043552 の場合、%edx にコピーされる値は 65312 です。
組み立て初心者ですので、私の勘違いでしたら申し訳ありません。どんな助けでも大歓迎です。
assembly - IA-32 AT&T 構文で MOVZBL 命令は何をしますか?
この指示は正確に何をしますか?
assembly - 32ビットレジスタのx86-64命令が、完全な64ビットレジスタの上部をゼロにするのはなぜですか?
インテルマニュアルのx86-64ツアーで、私は読んだ
おそらく最も驚くべき事実は、レジスタ
MOV EAX, EBX
の上位32ビットを自動的にゼロにするなどの命令RAX
です。
同じソースで引用されているIntelのドキュメント(手動の基本アーキテクチャの64ビットモードの3.4.1.1汎用レジスタ)には、次のように記載されています。
- 64ビットのオペランドは、宛先の汎用レジスタに64ビットの結果を生成します。
- 32ビットのオペランドは32ビットの結果を生成し、宛先の汎用レジスタで64ビットの結果にゼロ拡張されます。
- 8ビットおよび16ビットのオペランドは、8ビットまたは16ビットの結果を生成します。宛先汎用レジスタの上位56ビットまたは48ビット(それぞれ)は、演算によって変更されません。8ビットまたは16ビット演算の結果が64ビットアドレスの計算を目的としている場合は、レジスタを完全な64ビットに明示的に符号拡張します。
x86-32およびx86-64アセンブリでは、次のような16ビット命令
eaxの上位ワードがゼロになるような「奇妙な」動作を示さないでください。
したがって、この動作が導入された理由は何ですか?一見、それは非論理的に見えます(しかし、その理由は、私がx86-32アセンブリの癖に慣れているためかもしれません)。
assembly - 「movrax、0x1」の代わりに「mov eax、0x1」を常に使用できますか?
このコードを次のようにアセンブルする場合nasm
:
私はこの出力を取得します:
mov eax, 0x1
これは2回繰り返されるオペコードです。
これは、それをいつでも置き換えるmov rax, 0x1
ことができるという意味ですか、それともこの場合だけですか?mov eax, 0x1
これが正しければ、以下よりも使用する方が良いでしょう。
アセンブルすると6バイトになりますmov eax, 0x1
が、たった5バイトですか?
x86 - 32ビットは64ビットレジスタの上位ビットをゼロにしますか?
を実行してmovl something, %eax
0x1234567812345678rax
のようなものを含めた場合、上半分が自動的にゼロになりrax
ますか?
assembly - x86_64 レジスタ rax/eax/ax/al は完全なレジスタ内容を上書きします
広く宣伝されているように、最新の x86_64 プロセッサには、32 ビット レジスタ、16 ビット レジスタ、さらには 8 ビット レジスタとして下位互換性のある方法で使用できる 64 ビット レジスタがあります。次に例を示します。
このようなスキームは、文字どおりに解釈できます。つまり、指定された名前を使用して、読み取りまたは書き込みの目的で常にレジスタの一部のみにアクセスでき、非常に論理的です。実際、これは 32 ビットまでのすべてに当てはまります。
ただし、64 ビットのものになるとすぐに、かなり厄介なことがわかります。
そのような行動は、私には非常にばかげており、非論理的であるように思えます。何らかの方法で何かを書き込もうとすると、レジスタeax
の上位 32 ビットが消去されるようrax
です。
だから、私は2つの質問があります:
この厄介な動作はどこかに文書化する必要があると思いますが、詳細な説明 (64 ビットレジスタの上位 32 ビットがどのように消去されるか) がどこにも見つからないようです。
eax
常にワイプに書いているrax
のは正しいですか、それとももっと複雑ですか?すべての 64 ビット レジスタに適用されますか、それともいくつかの例外がありますか?強く関連する質問で同じ動作について言及されていますが、残念ながら、ドキュメントへの正確な参照はありません。
つまり、この動作を指定するドキュメントへのリンクが必要です。
それは私だけですか、それともこの全体が本当に奇妙で非論理的であるように思われますか (つまり、eax-ax-ah-al、rax-ax-ah-al には 1 つの動作があり、rax-eax には別の動作があります)? なぜそのように実装されたのかについて、ここである種の重要な点が欠けているのではないでしょうか?
「なぜ」についての説明をいただければ幸いです。
assembly - MIPS では、いつ符号付き拡張を使用し、いつゼロ拡張を使用するのですか?
私は個人的なプロジェクトとして MIPS プロセッサを設計していますが、今では非常に混乱した質問に遭遇しました。MIPSでsigned-extendをいつ使用し、いつzero-extendを使用するかを要約することはできません。
私は多くのリソースを検索しましたが、主に次のように述べています。
1) ADDI、ADDIU は両方とも符号付き拡張を使用します。
2) ANDI、ORI、XORI は両方ともゼロ拡張を使用します。
ただし、これらの 2 つの命令では、混乱し始めています。
SLTIU/SLTI
Imagination の「MIPS Architecture for Programmers Volume II-A: The MIPS instruction set Manual」ページ 368 には、次のように記載されています。
16ビットの即値は符号付き拡張であると明確に述べられていますが、次のステートメントがわかりません。
[0, 32767] または符号なし範囲の最大 [max_unsigned-32767, max_unsigned] の終わり。
また、次のように、16 ビットの即値はゼロ拡張であると言う人もいます。
さて、MIPS における符号付き命令と符号なし命令の正確な違いを説明できる人はいますか?
assembly - MASM アセンブリは、8 ビット レジスタを 16 ビット レジスタに移動します (つまり、mov cx, ch)
アセンブリプログラミング言語を学ぶことにしました。この 8086 チュートリアルを使用しています。一番下の演習は、いくつかの命令のエラーを見つけることであり、そのうちの 1 つは次のとおりです。
SO について、このトピックでそれを達成する方法を説明する同様の質問を見つけましたが、この操作が禁止されている理由を知りたいですか?
CHに10d = 00001010bがあり、それをCLに入れ、同時にCHを消去したいとしましょう。mov cx, ch
10d を 16bit 00000000 00001010 と表示し、CH と CL にそれぞれ入れる (CX 全体) のでそうするようです。
何が問題なのですか? また、チュートリアルでこの式のエラーを見つけるよう求められるのはなぜですか?
c++ - アセンブリ命令を c++ に変換する
以下のアセンブリを C++ に変換するのに問題があります
EDX は 32 ビット レジスタです。最下位の 16 ビット (DX) を取得する必要があります。
私は次のことを試しました:
dx に保存されている BCDE の値を取得することを期待していますが、少し間違っています。
どんな助けでも大歓迎です。