logo

アセンブリ言語とは何ですか?

プログラミング言語について話すとき、最初に頭に浮かぶのは、C、C++、Java、Python などの言語です。しかし、これらの言語は実際の動作を隠し、つまり多くのことをユーザーから抽象化します。しかし、実際には、プログラミングやコンピューター ハードウェア間の相互作用の背後にある基本概念に基づいた言語が存在します。

アセンブリ言語とは何ですか?

アセンブリ言語 は、コンピュータ ハードウェアとの直接通信に役立つ低レベル言語です。ニーモニックを使用して、プロセッサが実行する必要がある操作を表します。次のような高級言語の間の中間言語です。 C++ そしてバイナリ言語。 16 進値と 2 進値が使用され、人間が読み取ることができます。



アセンブリ言語の進化?

アセンブリ言語は、コンピューター ハードウェアの進歩とプログラマーのニーズの進化とともに進化してきました。各世代を詳しく見てみると次のようになります。

アルファベット番号は何ですか

第一世代 (1940-1950) :

  • コンピューターは真空管に依存しており、プログラミングはバイナリ命令を使用して直接機械語で行われていました。
  • アセンブリ言語は、ニーモニック コードを使用して機械命令を表現する、可読な抽象概念として登場しました。

第二世代 (1950-1960) :



  • トランジスタベースのコンピューターが真空管に取って代わり、一貫性と処理能力が向上しました。
  • これらの新しいマシンの複雑な命令セットを処理するために、アセンブリ言語はより複雑になりました。同時に、次のような高級プログラミング言語も フォートラン そして コボル 提供される高度な抽象化

第三世代 (1960-1970) :

  • 集積回路は標準的なものとなり、その結果、機能は低下しましたが強力なコンピューターが誕生しました。
  • アセンブリ言語はさらに進化し、マクロやシンボリック ラベルなどの機能が導入され、プログラマーの生産性とコードの可読性が向上しました。

第 4 世代 (1970 ~ 1980 年) :

  • マイクロプロセッサの始まりはコンピューティングを変革し、IBM PC や Apple II などのマイクロコンピュータ システムへの道を切り開きました。
  • マイクロコンピューターのアセンブリ言語はユーザーのアクセシビリティを強化するために再設計され、構文の強調表示や自動インデントを備え、より多くのプログラマー グループの包括性が向上しました。

第 5 世代 (1980 年~現在) :



  • この時代の特徴は、複数の計算タスクを同時に実行することです。この方法は、として知られています。 並列処理システム 洗練されたソフトウェア システムの成長
  • アセンブリ言語は、複雑なシステム向けのコードのパフォーマンスと生産性の向上に重点を置いた最先端のデバッグ手法とツールの導入により、プログラマーの要求を満たすために進化し続けました。

アセンブリ言語はどのように機能するのでしょうか?

アセンブリ言語には、プロセッサが何を実行するかを指定するニーモニック コードが含まれています。プログラマが書いたニーモニックコードを機械語(バイナリ言語)に変換して実行します。アセンブラは、アセンブリコードを機械語に変換するために使用されます。そのマシンコードは、実行のために実行可能ファイルに保存されます。

これにより、プログラマはレジスタ、メモリ位置、メモリ位置などのハードウェアと直接通信できるようになります。 入出力デバイス またはその他の ハードウェア コンポーネント。これは、プログラマがハードウェア コンポーネントを直接制御し、効率的な方法でリソースを管理するのに役立ちます。

アセンブリ言語を実行するにはどうすればよいですか?

  • アセンブリコードを書く : デバイスで任意のテキスト エディタを開き、ニーモニック コードを書き込み、アセンブラに応じた適切な拡張子を付けてファイルを保存します。延長できるのは、 .asm .s .asm バツ。
  • コードの組み立て : を使用してコードを機械語に変換します。 アセンブラ
  • オブジェクトファイルの生成 : コードに対応するオブジェクト ファイルが生成されます。拡張子が付きます。 オブジェクト
  • 実行可能ファイルのリンクと作成 : アセンブリ言語には複数のソース コードが含まれる場合があります。そして、実行可能にするためにそれらをライブラリにリンクする必要があります。この目的のために、lk のようなリンカーを使用できます。
  • 実行中のプログラム : 実行可能ファイルを作成したら、通常どおり実行できます。プログラムの実行方法はソフトウェアによって異なります。

アセンブリ言語のコンポーネント

  • レジスタ: レジスタは、プロセッサ内にある高速メモリの場所です。どちらが役に立ちますか 行く 算術演算とデータの一時保存を実行します。例: Ax (アキュムレータ)、Bx、Cx。
  • 指示: コマンドとして知られるアセンブリ コード内の命令は、アセンブラに何をすべきかを通知します。アセンブリ言語命令は通常、追加を表す ADD やデータ移動を表す MOV のように、語彙を単純にするために自己記述的な略語を使用します。
  • 説明書: 命令は、LOAD、ADDITION、MOVE などの特定のタスクを実行するためにプロセッサに与えるニーモニック コードです。例: 追加
  • ラベル: これは、アセンブリ コード内の特定の場所またはアドレスを示すために与えられる記号名/識別子です。例: コードの実行部分の開始を示す FIRST。
  • ニモニック: ニーモニックは、アセンブリ言語命令の頭字語、または機械関数に付けられた名前です。アセンブリ内の各ニーモニックは、特定のマシン命令に対応します。 Add は、これらのマシン コマンドの 1 つを示しています。 CMP、Mul、Lea などもその例です。
  • 大きい: マクロは、一度定義すると、呼び出すことでプログラム内のどこでも使用できるプログラム コードです。また、アセンブラやコンパイラに組み込まれることもよくあります。ディレクティブ %macro を使用して定義する必要があります。例: %macro ADD_TWO_NUMBERS 2
    eax を追加、%1
    eax を追加、%2
    %endマクロ
  • オペランド: これらは、何らかの操作を実行するための指示を通じて与えられるデータまたは値です。例: ADD R1,R2 の場合; R1 と R2 はオペランドです。
  • オペコード: これらは、どの操作を実行する必要があるかをプロセッサに指定するニーモニック コードです。例: ADD は加算を意味します。

16 進数体系 は、16 の記号を使用してさまざまな数字を表すために使用される記数法です。 0~9の数字とA~Fのアルファベットとそれ は 16 進数の記数法です。 10 進数の 0 ~ 9 と 16 進数は同じです。

10 進数から 16 進数へのテーブル

10進数

16進数

10進数

16進数

10進数

16進数

10進数

16進数

0

0

10

二十

14

30

1E

1

文字列を int Java としてキャストする

1

十一

B

21

15

31

1F

2

2

12

C

22

16

32

二十

3

3

13

D

23

17

33

21

4

4

14

そして

24

18

3.4

22

5

5

15

F

25

19

35

23

ジャワの尻尾

6

6

16

10

26

1A

36

24

7

7

17

十一

27

1B

37

25

8

8

stsダウンロード

18

12

28

1C

38

26

9

9

19

13

29

1D

39

27

16 進数は、2 進数系、10 進数系、8 進数系などの別の形式に簡単に変換でき、またその逆も可能です。この記事では、16 進数から 10 進数への変換、およびその逆の変換のみに焦点を当てます。

10 進数から 16 進数への変換:

ステップ 1: 入力 10 進数値 N を取得します。

ステップ 2: N を 16 で割り、余りを格納します。

ステップ 3: ステップ 2 で得た商を再度 16 で割り、余りを保存します。

ステップ 3: 商が 0 になるまでステップ 3 を繰り返します。

ステップ 4: 余りを逆の順序で書き込みます。これは数値の 16 進値です。

ボーン・アゲイン・シェル

例 : 450 10 進数値を 16 進数値に変換します。

ステップ 1: N = 450。

ステップ 2: 450/16 は Q = 28、R = 2 となります。

ステップ 3: 28/16 は Q = 1、R = 12 = C を与えます。

ステップ 4: 1/16 は Q = 0、R = 1 を与えます。

ステップ 5: 450 の 16 進数は 1C2 です。

16 進数から 10 進数への変換

16 進数を 10 進数に変換するには、各桁を右から開始してその位置の 16 乗で乗算し、右端の桁の位置が 0 になるようにして結果を加算します。

例: 変換(A7B) 16 10進数に変換します。

(A7B)16=A×162+7×161+B×160

⇒ (A7B)16= 10 × 256 + 7 × 16 + 11 × 1 (記号 A と B を 10 進数に変換します。A = 10、B = 11)

⇒ (A7B)16= 2560 + 112 + 11

⇒ (A7B)16= 2683

したがって、(A7B) に相当する 10 進数は16は (2683)10

アセンブリ言語の利点

  • ハードウェアを正確に制御できるため、コードの最適化が向上します。
  • レジスタなどのハードウェア コンポーネントに直接アクセスできるため、ハードウェアの問題に合わせたソリューションが可能になります。
  • 低レベルの制御、最適化されたコード、リソースの認識、カスタマイズなどによる効率的なリソースの利用。
  • プログラミングに最適です マイクロコントローラー 、センサー、その他のハードウェア コンポーネント。
  • セキュリティの脆弱性を発見するためのセキュリティ研究や、システム セキュリティのためのソフトウェアのリバース エンジニアリングに使用されます。
  • を作る上でとても欠かせないのが、 オペレーティングシステム カーネル そして デバイスコントローラー その機能にはハードウェアの相互作用が必要です。

アセンブリ言語の欠点

  • 複雑で、特に初心者にとってこの言語を学ぶのは非常に困難です。
  • マシンに大きく依存します。したがって、携帯性が制限されます。
  • 特に大規模なプロジェクトの場合、コードを保守するのは非常に困難です。
  • 理解するのが非常に難しく、コードが非常に長いため、非常に時間がかかります。
  • デバッグ プログラマーにとっては非常に挑戦的です。

アセンブリ言語に関するよくある質問 – FAQ

アセンブリ言語はどこで使用されますか?

  • オペレーティングシステムの開発
  • デバイスドライバーの作成
  • 組み込みシステムプログラミング
  • リアルタイムアプリケーション
  • セキュリティ研究

アセンブリ言語と高級言語の違い?

アセンブリ言語はニーモニック コードであり、CPU の命令セットと密接に関連しています。 HLL には抽象化があります。

アセンブリプログラミングのためにどの CPU アーキテクチャを学べばよいですか?

8085 および 8086 マイクロ プロセッサ アーキテクチャは、概念を理解するのにはるかに優れています。

アセンブリ言語は現代のコンピューティングに依然として関連していますか?

はい。アセンブリ言語は引き続き関連性を維持します。