問題タブ [low-level-code]
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.
java - Java バイトコードと JVM について学ぶ
最近の質問で、私の素朴な答えは、Java、JVM、およびコードがどのようにコンパイルされて実行されるかについての私の誤解の多くを浮き彫りにしました。これにより、自分の理解をより低いレベルに引き上げたいという欲求が生まれました。アセンブリのような低レベルの理解に問題はありませんが、バイトコードと JVM が私を混乱させました。オブジェクト指向コードが低レベルでどのように分解されるかは、私にはわかりません。JVM、バイトコード、および Java の下位レベルの機能について学ぶ方法について誰か提案があるかどうか疑問に思っていました。バイトコードを直接記述して実行できるユーティリティはありますか?何かを実際に体験することが、理解を深めるための最良の方法であると私は信じています。さらに、このトピックに関する提案を読んでいただければ幸いです。
編集:二次的な質問。だから私はちょっとサブの質問があります.答えは私にjvmについて学ぶための興味深いアイデアを与えてくれました.brainf ** kやOokのような本当に単純な言語を読みやすい構文だけで書くことの妥当性は何でしょうか.最終的に oo をサポートするには)、それはバイトコードにコンパイルされますか? それは良い学習経験になるでしょうか?
c - Cプログラミングとerror_code変数の効率
私が今まで読んだほとんどのコードはint
、標準のエラー処理(関数などからの戻り値)にを使用しています。しかし、willコンパイラを使用することで得られるメリットがあるかどうか疑問に思っていますuint_8
-読み取り:ほとんどのアーキテクチャのほとんどのCコンパイラ-イミディエートアドレスモードを使用して命令を生成します-つまり、1バイトの整数を命令に埋め込みます?私が考えている重要な命令は、戻り型としてuint_8を使用して、関数が戻った後の比較です。
1バイト型を導入するとアライメントの問題が発生するため、私は間違って考えている可能性があります-コンパイルが4バイトにパックするようにコンパイルするのはおそらく完全に正しい理由であり、これがおそらく誰もがintを使用する理由です-そしてこれはヒープではなくスタック関連の問題であるため、実際のオーバーヘッドはありません。
正しいことをすることが私が考えていることです。しかし、議論のために、これはインテリジェントウォッチに人気のある安価なマイクロプロセッサであり、1kのメモリで構成されていますが、命令セットに異なるアドレッシングモードがあるとしましょう:D
ディスカッション(x86)を少し専門化するためのもう1つの質問は、次のとおりです。
と
同じタイプ?または、2番目のケースでは、コンパイラは8バイトのリテラルを生成します。その場合、それを使用して、リテラルを即値として、返されたintをレジスタ参照として持つ比較命令を生成できます。CMP命令タイプを参照してください。。
audio - 低レベルのサウンド プログラミング理論のチュートリアルはどこにありますか
私は中級のグラフィックプログラマーです。音声・音響処理の理論を一から学びたい。
「ピクセル」とそのコンポーネント R、G、B、A がグラフィックス プログラミングの基本部分であるのと同じように。似たようなセリフのサウンドプログラミングについて知りたいです。
誰かが私に良いリンクを教えてくれますか? また、サウンドを操作できるいくつかのライブラリ (できればポータブル) を知りたいです。mp3、amr ファイルを直接操作できるもの。
本のおすすめも気にしません:)
c - .rodata移転関連の質問
仮想メモリ(またはより正確にはOS)のないマシン用のCプログラムを作成しようとしていますが、.rodataセクション、またはより正確にはそこにあるものでいくつかの問題に直面しています。リンク中にセクションが適切に定義されたアドレスに配置されていても、プログラムが実行されると、セクションが再配置されるという問題が発生します。
例: 私のプログラムの開始が 0x1000 で開始するようにリンクされているとしましょう。実行中に、0x1000 にあるはずのものが 0xff1000 に再配置されます。
これらは言われていますが、私の問題は、通常.rodataに入るものがコンパイラ(gcc)によって「ハードコード」されていることです。再配置とgccがアドレスをハードコーディングしているため、メモリ内の前述の.rodata定数が失われます。相対オフセットではなく絶対オフセットを取得します。
.rodata 定数に絶対オフセットではなく相対オフセットを持たせる方法はありますか? 相対とは、アクティブなプロセス レジスタとの相対を意味しますか?
c - scanf の代わりに read() を使用してユーザー入力を取得します
read() 関数を使用してユーザー入力を取得しようとしていますが、ドキュメントで見つけることができるのは、ファイルからの読み取りに関するものだけです。これは Linux c 言語です。また、コンソールに何かを表示するために write() を使用したいと考えています。
これがどのように行われるか誰にも分かりますか?
assembly - 低水準プログラミング言語の学習教材を探している
ドライバーやファームウェア、その他のオペレーティング システムを作成するためのベアメタル プログラミングを勉強したいと思っていますが、これらの言語を学習するための優れた教材を見つけることができません。私が見つけた asm の宝石はほとんどなく、16 進数でのプログラミングについては何も見つかりませんでした。ストレート 16 進数とは、Linux カーネルのファームウェア セクションにあるようなものを意味します。http://www.omnimaga.org/index.php?topic=6272.0という 2 か月間の検索で得た最も近いものであり、このチュートリアルには情報が少なすぎて、私の知識ではフォローアップされていませんでした。
TL;DR: hex を学びたいです。どこ?
注:私は、これがいかに困難で、記念碑的で、マゾヒスティックな試みになるかを理解しています。あなたは私に言う必要はありません。このむち打ちの旅は、学習教材がない場合よりもあったほうがうまくいきます。
2 番目の注記:オペレーティング システム、カーネル、および I/O デバイスの内部の仕組みについては、抽象的ではありますが、メモリがどのように機能し、どのように割り当てられるかについて、既に多くのことを知っています。
私の内なるオタクは落ち着きがない!
arm - Qemu を使用した ARM アセンブリ
arm-linux-gnueabi-as と qemu を使用して実行されるコードをインターネット全体で検索しました。整数値を出力します。文字列から。ルーチンが役立ちます。
assembly - プログラムの機械語命令
プログラム命令 c = ab; をどのように配置しますか。マシンコード命令で?オペコード、a=80、b=81、c=82、およびプログラム カウンター = 30 hex のメモリ アドレスが提供されています。命令は 16 ビット長で、4 ビットのオペコード、レジスタ用の 4 ビット、メモリ アドレス用の 16 ビットです。
それがどのように開始されるかという正式な方法を知る必要があるだけです。これは、講師が教えていることを本当に理解していないためです。明確な方向性を得ることができれば、講師の助けなしでこれを行うことができると確信しています.
c - 「完全エラートラップ」とは?
低レベルの I/O のみを使用して C でプログラムを作成します。
プログラムには、完全なエラー トラップが必要です。特に、プログラムは perror() を使用してシステムエラーを報告する必要があります...
私のプログラムでは...
読み取り/書き込み試行ごとにそのようなコードを実装すると、これは「完全なエラー トラップ」と見なされますか?
注:test()
デバッグ用であり、後で削除されます: