問題タブ [machine-instruction]
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.
compiler-construction - 最初のコンパイラはどのように作成されましたか?
鶏肉と卵とブートストラップについて聞いた。少し質問があります。
何かをバイナリ命令に変換した最初のコンパイラを書いたのは何ですか?
アセンブリはコンパイルまたはバイナリ命令に変換されますか?
...彼らがコンパイラをバイナリで書いたとは信じがたい。
c - Cプログラミングとerror_code変数の効率
私が今まで読んだほとんどのコードはint
、標準のエラー処理(関数などからの戻り値)にを使用しています。しかし、willコンパイラを使用することで得られるメリットがあるかどうか疑問に思っていますuint_8
-読み取り:ほとんどのアーキテクチャのほとんどのCコンパイラ-イミディエートアドレスモードを使用して命令を生成します-つまり、1バイトの整数を命令に埋め込みます?私が考えている重要な命令は、戻り型としてuint_8を使用して、関数が戻った後の比較です。
1バイト型を導入するとアライメントの問題が発生するため、私は間違って考えている可能性があります-コンパイルが4バイトにパックするようにコンパイルするのはおそらく完全に正しい理由であり、これがおそらく誰もがintを使用する理由です-そしてこれはヒープではなくスタック関連の問題であるため、実際のオーバーヘッドはありません。
正しいことをすることが私が考えていることです。しかし、議論のために、これはインテリジェントウォッチに人気のある安価なマイクロプロセッサであり、1kのメモリで構成されていますが、命令セットに異なるアドレッシングモードがあるとしましょう:D
ディスカッション(x86)を少し専門化するためのもう1つの質問は、次のとおりです。
と
同じタイプ?または、2番目のケースでは、コンパイラは8バイトのリテラルを生成します。その場合、それを使用して、リテラルを即値として、返されたintをレジスタ参照として持つ比較命令を生成できます。CMP命令タイプを参照してください。。
assembly - ASM 8086 の ADC 命令
ADC
たとえば、次のように使用します。
私がこれを作るとき:
または?AL
_ _ (添加の有無は?)3
4
CF
operating-system - オペレーティング システムの 1 秒あたりの命令数
私はコンピューター アーキテクチャとデザインの初心者です。私の質問は高レベルのプログラムでした。命令セットは CPU で次々と実行されます。これらの命令を実行するときに、オペレーティング システムの命令がオーバーヘッドとして含まれますか? 例: 2 GHz プロセッサの場合、2*10^9 クロック サイクルで実行できる 2*10^9 命令があります。その場合、オペレーティング システムは常に 1 秒あたり約 1*10^9 命令を実行します。このオーバーヘッドは常に存在し、別の 1*10^9 命令のみが、他のカスタム スケジュール プログラムの実行に自由に使用できますか?
これは、オペレーティング システムが常に実行する命令をできる限り少なくして、実行する他のプログラムをより多く収容できるようにする必要があるということですか?
cpu-architecture - プロセッサ/レジスタ/メモリで、データ、アドレス、および命令はどのように区別されますか?
プロセッサでは、データ、アドレス、および命令はどのように区別されますか? 0
プログラムが実行されるとき、すべてがs と1
s にあり、レジスタが両方のデータ、アドレスをロードする場合、プロセッサはどのように命令を区別しますか?
c++ - どのC++コードがx86REP命令にコンパイルされますか?
C++で1つの配列から別の配列に要素をコピーしています。rep movs
ESIの配列をサイズECXのEDIの配列にコピーするように見えるx86の命令を見つけました。ただし、VS 2008(Intel Xeon x64プロセッサ上)の命令にコンパイルしようとしたfor
norループはどちらもありません。この命令にコンパイルされるコードをどのように書くことができますか?while
rep movs
machine-instruction - メモリ セルの LSB のみを変更する
メモリ セル内の他のビットを乱すことなく、アドレス B3 のメモリ セルの最下位ビットに 1 を配置する一連の命令を書き込むことは可能ですか?
私が言及している機械語命令は、STOP、ADD、SWITCH、STOP、LOAD、ROTATE などです。
c++ - aesimc 命令で誤った結果が返される
Sandy Bridge で利用可能なAES マシン命令 (Intel のホワイト ペーパーに基づく) を使用して AES 暗号化を実装しようとしています。残念ながら、復号化用のラウンド キーを生成する段階で停止してしまいました。具体的には、 ( Inverse Mix Columnsaesimc
操作を適用する) 命令は正しくない結果を返します。
彼らの論文には、次の例があります。
したがって、入力では:
を使用して次を取得します_mm_aesimc_si128()
。
返されたはずです:
同じ結果ではありません。これはなぜですか?
再現したい場合は、以下のコードでテストしました(-maes -msse4
コンパイル時の引数を覚えておいてください):
編集: Intel のホワイト ペーパーの例は間違っていました。Hans が示唆したように、私のチップはリトルエンディアンなので、前後にバイト交換が必要です。
optimization - 大なり記号と大なり記号の間にパフォーマンスの違いはありますか?
今日の最新のプロセッサでは、分岐条件の大なり記号と大なり記号の比較の間にパフォーマンスの違いはありますか?>
私が同じように簡単にどちらかになる可能性のある状態を持っている場合、どちらかを選択することにわずかな利点がありますか、>=
またはその逆ですか?(これは、IntelまたはAMDハードウェアでコンパイルされた言語用です)
clock - クロック サイクルのヘルプ
クロックサイクルを理解するのに苦労しています。ここに問題があります。2 つの命令 X と Y を持つプログラムが与えられ、X が 20% の時間実行され、8 クロック サイクルが必要であり、他の命令 Y が 80% の時間実行され、2 クロックが必要であることがわかっています。サイクル。私のプログラムに 1,000 万の命令がある場合、以下を見つける必要があります。
A. 1 つの命令を実行するための最小クロック サイクル数は?
B. 命令 X を改善することで得られる、アムダールの法則を使用した最大速度アップ。
これは私のハントであり、私が間違っているところを助けてください。A の場合、1 つの命令を実行するための最小クロック サイクル数は 1 クロック サイクルです。これはどこかで読んだ気がするが定かではない。
BI を実行するには、X のクロック サイクルが 1 の場合の高速化を解決する必要があると想定しています。
これらの仮定は正しいですか?どんな助けでも大歓迎です。ありがとう