問題タブ [sign-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.
c - アセンブリ IA32 の符号拡張
私はアセンブリが初めてで、IA32 アーキテクチャを使用しています。次の操作を生成する関数をコーディングしようと.s
しています: C + A - D + B
- A は 8 ビット変数です
- B は 16 ビット変数です
- C と D は両方とも 32 ビット変数です
この関数は、C で出力する必要がある 64 ビット値を返す必要がありますが、これを理解することはできません。
私はこれを試していますが、正の数のテストでは機能しますが、負の数で作業しているときは機能せず、理由がわかりません。
私の機能sum_and_subtract.s
:
正しい例は次のとおりです。
- A = 0、B = 1、C = 0、D = 0; 期待値 = 1 -> 結果 = 1 であり、この例では機能します
エラーは次の場合に表示されます。
- A = 0、B = 0、C = 0、D = 1; 期待値 = -1 -> 結果 = 256
あなたのコメントを見た後、長い長い結果を出力するメインコードを書くのを忘れていました。
main.c :
ここにあります。
私はこの他のファイルを持っていますsum_and_subtract.h
assembly - avrでint8をint16に変換する方法
私のコンピューター サイエンスのクラスでは、今週 AVR の作業を始めたばかりです。8 ビット int を 16 ビット int に変換するために必要なビット操作に問題があります。文脈のために、私はarduinoからプログラムを実行しています。
これは私がこれまでに持っているものです:
これは、この Web サイトでドキュメントや同様の問題を少し調べて得たものですが、ここからどこに行くべきか、またはこれが正しいかどうかさえわかりません。どんな助けでも大歓迎です!
assembly - MIPS I 型指示記号拡張についての混乱
私は MIPS 命令を学んでいますが、即値を拡張する必要がある I タイプの命令をテストすると、次の結果について混乱します (それらはすべて MARS で実行されます)。
- ソース コード行 があるとします
ori $s1, $s2, 0xfd10
。MARS は基本的なアセンブラ命令ori $17, $18, 0x0000fd10
を提供します。これは、16 ビットの即値ori
をゼロ拡張する必要があるためです。機能を変更するだけori
でandi
、つまりソース コードの行andi $s1, $s2, 0xfd10
だけを変更すると、MARS はほぼ同じ基本的なアセンブラ命令andi $17, $18, 0x0000fd10
を提供します。ただし、 とは異なりori
、符号拡張andi
を使用する必要があります。したがって、基本的なアセンブラ命令は.andi $17, $18, 0xfffffd10
andi
また、ゼロ拡張を使用する必要があります。最初の質問は無視してください。
slti rt, rs, imm
たとえば、を使用しようとするとslti $s1, $s2, 0x8000
、MARS は行の実行を拒否し、エラー メッセージは"0x8000": operand is out of range
. 即時が範囲外である理由はわかりません。即時を少し下に変更すると、たとえば 、slti $s1, $s2, 0x7fff
機能し、即時が に拡張され0x00007fff
ます。私の期待は、0x8000
に拡張する必要があること0xffff8000
です。私の理解に何か問題がありますか?