タグ付けされた質問 「assembly」

アセンブリ言語は、コンピューター、マイクロコントローラー、またはその他のプログラム可能なデバイス用の低レベルのプログラミング言語であり、各ステートメントは単一のマシンコード命令に対応しています。

17
アセンブリの学習はプログラミングにどのように役立ちますか?[閉まっている]
私は約10年間、高レベルの言語(Python、C#、VBA、VB.NET)でプログラミングを行ってきましたが、「裏側」で何が起こっているのか全く理解していません。 アセンブリを学習することの利点は何ですか?また、プログラマーとしてどのように役立つでしょうか?より高いレベルのコードで記述したものとアセンブリで行われることとの正確な関係を示すリソースを提供していただけますか?
132 assembly 

7
これはアセンブリ言語ですか?
私の幼少期には、MK-61 ソビエト電卓でプログラムを作成していました。4つの操作レジスタ(X、Y、Z、T)と15のストレージレジスタがありました。プログラムには105ステップあります。 思い出すと、次のようなコマンドがありました。 XおよびYレジスタを交換する シフトレジスタ(ZからT、YからZ、XからY) ストレージレジスタ(1..15)からXへのコピー Xからストレージレジスタへのコピー(1..15) X <0の場合、プログラムステップ##に進みます。 XおよびYの値を使用して操作(+、-、*、/)を実行し、結果をXに書き込む このコマンドはアセンブリ言語を設定していますか?このデバイスを使用して、アセンブリ言語の基本的なアイデアはありましたか? 「キーストロークプログラミング」と呼ばれるものであることがわかりました。 おもしろい事実:1988年に、宇宙ミッションの軌道計算用のバックアップハードウェアとして、同様の計算機(これと似ていますが、エネルギーに依存しないメモリを使用)が使用されました。

9
最初のコンパイラはどのように作成されましたか?
私はいつもこれを疑問に思っており、おそらくプログラミング言語に関する良い歴史のレッスンが必要です。しかし、最近のほとんどのコンパイラはCで作成されているため、最初のコンパイラ(C以前の別名)はどのように作成されましたか? とはいえ、最初のアセンブリ言語がどのように行われたかはまだわかりません、アセンブリ言語とは何ですか?コマンド(などmov R21)または同等のバイナリに設定されたw / e?

12
コンピューターの仕組み [閉まっている]
これはほとんど恥ずかしい質問です...私はコンピューターサイエンスの学位を取得しています(2番目の学位も取得中です)。私はフルタイムの.NET開発者として5年近く働いてきました。私は一般的に私がやっていることで有能だと思う。 しかし、私はコンピュータの仕組みがわかりません! ちょっとだけ裸にしてください。「How a Computer Works」の簡単なグーグルは多くの結果をもたらしますが、私が探しているものに本当に答えるものを見つけるのに苦労しました。これは非常に大きな質問だと思いますので、キーワードや方向性を教えていただければ幸いです。 コンポーネント、電源、マザーボード、RAM、CPUなどがあることは知っています。そして、それらが何をするのかについての「一般的なアイデア」を得ることができます。しかしConsole.Readline()、.NET(またはJavaやC ++)のようなコード行からどのように進んで、実際にそれを実行させるかは本当に理解していません。 確かに、MSIL(.NETの場合)を漠然と認識していますが、JITコンパイラーで何らかの魔法が発生し、ネイティブコードになります(と思います)。Javaも同様であり、C ++は中間段階を切り捨てたと言われています。 私はいくつかのメインフレームアセンブリを行いました。それは数年前のことです。いくつかの命令といくつかのCPUレジスタがあり、コードを書いたのを覚えています...そして魔法が起こりました...そして私のプログラムは動作します(またはクラッシュします)。私が理解していることから、「エミュレータ」は命令を呼び出すと何が起こるかをシミュレートし、CPUレジスタを更新します。しかし、これらの指示が彼らのやり方で機能するのはなぜですか? これは「コンピューター」の質問ではなく、エレクトロニクスの質問になりますか?これを理解する実用的な理由はないと思うが、できるはずだと思う。 (はい、これは小さな子供と1日を過ごすと何が起こるかです。約10分、「なぜ?」

4
Apollo 11ミッションのコードに使用される開発プロセスは?
アポロの任務には、電卓ほど複雑な技術はなかった。 こちらのリンクから、Apollo Guidance Computer(AGC)に関する情報があります。 オンボードのApollo Guidance Computer(AGC)は約1立方フィートで、2Kの16ビットRAMと36Kのハードコアコアロープメモリで、銅線は小さな磁気コアに通されているか、通されていません。16ビットワードは通常、14ビットのデータ(または2つのオペコード)、1符号ビット、1パリティビットでした。サイクルタイムは11.7マイクロ秒でした。プログラミングはアセンブリ言語と逆ポーランド語の解釈言語で行われました。 そのため、そこにあるものを調査したときにいくつかのソースコードに出くわし、素晴らしいコメントに気付きました(たとえば、TEMPORARY、I HOPE HOPE HOPE) VRTSTART TS WCHVERT # Page 801 CAF TWO # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67 TS WCHPHOLD TS WCHPHASE TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE TC DOWNFLAG # PERMIT …

3
なぜスタックを後方に拡張するのですか?
Cコードをコンパイルしてアセンブリを見ると、スタックは次のように後方に成長します。 _main: pushq %rbp movl $5, -4(%rbp) popq %rbp ret -4(%rbp)-これは、ベースポインタまたはスタックポインタが実際にメモリアドレスを上に移動する代わりに下に移動することを意味しますか?何故ですか? に変更$5, -4(%rbp)し$5, +4(%rbp)、コンパイルしてコードを実行しましたが、エラーはありませんでした。では、なぜメモリスタックをさかのぼる必要があるのでしょうか?
46 c  memory  assembly 

5
これを64 KBに収めるにはどうすればよいですか?
だから、私は2011年のアセンブリでここにいて、このデモが再生されました:http : //www.youtube.com/watch?v= 69Xjc7eklxE& feature=player_embedded これは単一のファイルのみであり、ルールに記載されています。繰り返しますが、どのようにしてこれを非常に小さなファイルに収めましたか?
45 assembly 

15
言語はCPU設計にどのように影響しましたか?[閉まっている]
私たちはされていることが多い語ったが、これは真実ではない、ハードウェアは、プログラムがそれだけでコンパイルされたバイナリコードを見ているように書かれている言語を気にしないこと。たとえば、謙虚なZ80を考えてみましょう。8080命令セットへのその拡張には、C-スタイル(NULLで終了する)文字列をスキャンするのに役立つCPIRなどの命令が含まれますstrlen()。設計者は、Cプログラムの実行(文字列の長さがヘッダーにあるPascalとは対照的に)が、設計で使用される可能性が高いことを特定している必要があります。別の古典的な例は、Lisp Machineです。 他にどんな例がありますか?たとえば、特定のプロセッサが特定の言語の規則を好むようにする命令、レジスタの数とタイプ、アドレス指定モードはありますか?私は特に同じ家族の改訂に興味があります。

10
最初のアセンブラは機械語で書かれていましたか?
私は、コンピューティングシステムの要素:First Principlesから現代のコンピューターを構築するという本を読んでいます。これには、ブールゲートから高レベルのアプリケーションまで(その順序で)コンピューターを構築するプロジェクトが含まれています。私が取り組んでいる現在のプロジェクトは、HackアセンブリコードからHackマシンコードに変換するために、選択した高水準言語を使用してアセンブラーを作成しています(Hackは前の章で構築されたハードウェアプラットフォームの名前です)。ハードウェアはすべてシミュレーターで構築されていますが、実際のプロセスのその時点で使用可能なツールのみを使用して各レベルを実際に構築しているふりをしようとしました。 とはいえ、考えさせられました。高級言語を使用してアセンブラーを作成するのは確かに便利ですが、史上初めて記述されたアセンブラー(つまり、歴史上)にとっては、マシンコードで記述する必要はありませんでした。 そして、関連する質問...今日はどうですか?新しい命令セットと新しいアセンブリ構文を備えた新しいCPUアーキテクチャが登場した場合、アセンブラはどのように構築されますか?新しいプラットフォームのアセンブリ言語と機械語の両方の構文を知っている場合、アセンブラーを記述するタスクは実際には単なるテキスト分析タスクであり、本質的にそのプラットフォームに関連していません(つまり、そのプラットフォームの機械語で記述する必要があります)。私を助けるための高水準言語。

11
高レベルの開発者がアセンブリの学習に時間を費やすのは賢明ですか?[閉まっている]
低レベルのものに関する知識が私たちの仕事において非常に重要であることは明らかです。 しかし、あなたはすでに高いレベルでの商用ソフトウェアを開発し、している状況にし、すでに選択した方向性を持っていますが、任意のアセンブリのスキルを持っていない、それはあなたの方向に関連するものを勉強に集中することがより合理的ではないでしょうか?または、とにかく低レベルの基本を学ぶために時間を費やす必要がある理由はありますか? 遅すぎるときとそうでないとき そして手遅れではない場合、どのようにして最適な学習を行うのでしょうか(ある程度の深みと理解を得るために過度の時間を費やさないという意味で)?

13
低レベルのプログラミング-私にとってそれは何ですか?[閉まっている]
何年もの間、「低レベル」言語と考えるものを掘り下げることを考えてきました。私にとって、これはCとアセンブリを意味します。しかし、私はまだこれをする時間がありませんでしたし、これまで必要だったこともありません。 必要性が生じていないので、主題を勉強する予定のある時点をスケジュールするか、永遠に計画を破棄する必要があると感じています。 私の位置 過去4年間、私は変化する可能性のある「Webテクノロジー」に注力してきました。また、私はアプリケーション開発者であり、変化することはほとんどありません。 アプリケーション開発では、ユーザビリティが最も重要だと思います。ユーザーが「消費」するアプリケーションを作成します。これらのアプリケーションが使いやすくなればなるほど、より多くの価値を生み出します。 使い勝手を良くするために、次のことが実行可能であると信じています 優れた設計:よく考え抜かれたユーザーインターフェイスからアクセスできる、よく考えられた機能。 正しさ:正しく実装されていなければ、最高のデザインは価値がありません。 柔軟性:アプリケーションAは絶えず進化する必要があるため、ユーザーは、Aが実装できる新しい機能を備えた別のアプリケーションBに切り替える必要はありません。同じ問題に対処するアプリケーションは、機能ではなく哲学が異なるはずです。 パフォーマンス:パフォーマンスは、優れたユーザーエクスペリエンスに貢献します。アプリケーションは理想的には常に応答性が高く、(頻度に基づいて)合理的に高速にタスクを実行します。ユーザーが認識できる以上のパフォーマンス最適化の価値は疑問です。 パフォーマンスを除いて、低レベルのプログラミングはそれを助けてくれないと思います。しかし、パフォーマンスのために低レベル言語でアプリ全体を書くことは、私にとって時期尚早な最適化です。 私の質問 低レベルのプログラミングは何を教えてくれますか?他の言語は教えてくれませんか?アプリケーション開発にほとんど役に立たない何かが足りないのですか、それとも単なるスキルですか?私がCとアセンブリの価値に疑問を抱いていないことを理解してください。私の日常生活の中で、私はその世界の複雑さをすべて取り除いて、私のために管理していることを非常に嬉しく思っています(ほとんどがC / C ++で記述されたレイヤーとアセンブリ自体によって)。概念がまったく見当たらず、それは私にとっては新しいことかもしれませんが、頭に詰め込む必要のある詳細だけです。それで私にとっては何ですか? 私の結論 回答ありがとうございます。誰も私を驚かせた人はいませんが、少なくとも今は、この必要な領域が必要になるまでこの領域を削除することを確信しています。 私の理解では、最近のプロセッサーが今日のCPUで使用されているときにアセンブリーを記述することは、不必要に複雑であるだけでなく、Cのカウンターパートよりも実行時のパフォーマンスが低下するリスクがあります。手作業による最適化はOOEによりほぼ不可能ですが、コンパイラーが自動的に実行できるすべての種類の最適化は得られません。また、使用可能なコマンドの小さなサブセットを使用するため、または最適化されているため、コードは移植可能ですが、おそらく1つのアーキテクチャでのみ動作します。 Cを書くことは、以前ほど必要ではなくなった。Cでアプリケーションを作成する場合、テストおよび確立されたライブラリとフレームワークを同様に使用します。これにより、文字列コピールーチン、ソートアルゴリズム、および大学での演習として役立つその他の種類の実装が不要になります。私自身のコードは、タイプセーフを犠牲にして高速に実行されます。私は通常のアプリ開発の過程で車輪を再発明することにも、コアダンプを見てデバッグしようとすることにも熱心ではありません:D 私は現在言語とインタプリタで実験しているので、何か公開したいことがあるなら、私は思うC ++がうまく機能するかもしれませんが、実用的な概念をCに移植します。 繰り返しますが、皆さんの回答と洞察に感謝します。

1
フレームポインターの説明
で組み立てMIPS、スタックポインタのためのレジスタ、およびフレームポインタのための別のレジスタがあります。フレームポインタとは何ですか、その目的は何ですか?スタックポインターとの違いは何ですか?
28 assembly  stack 

5
x86アセンブリに関する正規の本はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 アセンブリに関する本はたくさんあります。ただし、彼らは通常、MIPSやARMなど、気にしないISAを扱います。これらのアーキテクチャは扱いません。私がそれらを学ぼうとする理由はありません。 しかし、x86アセンブリブックは...存在しないようです。 たとえば、Windows Portable Executableファイルを生成するトイコンパイラをビルドしようとしているとします。 ベストプラクティス、設計方法論、およびx86アセンブリに関するその他の有用な情報を説明するための事実上の標準である本はありますか?その本はそれを特別なものにしていますか?
25 learning  books  assembly  x86 

3
コピー命令の名前が通常MOVであるのはなぜですか?
非常に多くのアセンブラーでは、値のコピー命令には通常「MOV」という名前が付けられ、マニュアルの説明には通常「move」も含まれています(ただし、「load」、「store」、「extract」など、他の単語も使用できます) )この規則に従わないISAを見つけることはまれです。 一方、他のコンテキストでは、ソースが破棄されるという意味で「move」と「copy」は異なります(たとえば、Unixでは「mv」と「cp」、Norton CommanderとクローンではMove [F6] など)。 )アセンブラーの「移動」には、セマンティック「コピー」があり、ソース値をそのまま保持します。 これは少なくともIBM 1401(1959)以来始まっていることがわかりましたが、IBM 360はこの単語をストレージ内コピーにのみ使用し、レジスタとストレージ(「ロード」と「ストア」を使用)間の操作には使用しませんでした。しかし、なぜそれがまだ広く使用されており、「コピー」または「ストア」に置き換えられていないのですか?
23 history  assembly 

3
仮想マシンを構築したいのですが、良い参考資料はありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 ゲームコード(本質的にスクリプト)を実行するプラットフォームに依存しない方法として仮想マシンを構築したいと考えています。 私がゲームで知っている仮想マシンはかなり古く、InfocomのZ-Machine、LucasArtsのSCUMM、id SoftwareのQuake 3です。.net開発者として、私はCLRに精通しており、CIL命令を調べて、VMレベル(言語レベル)で実際に実装するものの概要を取得しました。昨年、6502 Assemblerでも少し手を出しました。 問題は、これを実装したい¹ので、もう少し深く掘り下げる必要があります。スタックベースのVMとレジスタベースのVMがあることは知っていますが、どのアプローチがどれが優れているか、また、より多くのアプローチまたはハイブリッドアプローチがあるかどうかはわかりません。メモリ管理に対処し、どの低レベルタイプがVMの一部であるかを判断し、ldstrのようなものが動作する理由を理解する必要があります。 私の唯一の参考書(Z-Machineのものを除く)はCLI Annotated Standardですが、VMに関するより良い、より一般的/基本的な講義があるのでしょうか?基本的にDragon Bookのようなものですが、VM用ですか?レジスタベースのVMを使用するドナルドクヌースのコンピュータープログラミングの技術は知っていますが、特に未完成であるため、そのシリーズがまだどのように適用できるのかわかりません。 明確化:目標は、専用のVMを構築することです。たとえば、InfocomのZ-Machineには、背景色を設定したり、サウンドを再生したりするためのOpCodeが含まれています。したがって、スクリプト(言語TBD)を受け取り、それからバイトコードを生成するコンパイラーに対して、OpCodesとしてVMにどれだけの量が入るかを把握する必要がありますが、そのためには、実際に何をしているのかを理解する必要があります。 ¹最新の技術により、高レベルのスクリプト言語をその場で解釈することができます。しかし、その面白さはどこにありますか?:)また、最近では仮想マシンはVMWareタイプのOS仮想化に関連付けられていることが多いため、Googleを検索するのも少し難しいです...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.