アセンブリ-はじめに

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

各パーソナルコンピュータには、コンピュータの算術、論理、および制御アクティビティを管理するマイクロプロセッサがあります。

プロセッサの各ファミリには、キーボードからの入力の取得、画面への情報の表示、その他のさまざまなジョブの実行など、さまざまな操作を処理するための独自の命令セットがあります。これらの一連の命令は「機械語命令」と呼ばれます。

プロセッサは、1と0の文字列である機械語命令のみを理解します。ただし、機械語はソフトウェア開発で使用するにはあまりにも曖昧で複雑です。そのため、低レベルのアセンブリ言語は、シンボリックコードとより理解しやすい形式でさまざまな命令を表す特定のプロセッサフ​​ァミリ向けに設計されています。

アセンブリ言語の利点

アセンブリ言語を理解することで、次のことに気付くことができます。

  • プログラムがOS、プロセッサ、およびBIOSとどのようにインターフェースするか。
  • データがメモリやその他の外部デバイスでどのように表されるか。
  • プロセッサが命令にアクセスして実行する方法。
  • 命令がデータにアクセスして処理する方法。
  • プログラムが外部デバイスにアクセスする方法。

アセンブリ言語を使用する他の利点は次のとおりです。

  • 必要なメモリと実行時間は少なくなります。

  • これにより、ハードウェア固有の複雑なジョブをより簡単に実行できます。

  • タイムクリティカルなジョブに適しています。

  • 割り込みサービスルーチンやその他のメモリ常駐プログラムの作成に最適です。

PCハードウェアの基本機能

PCの主な内部ハードウェアは、プロセッサ、メモリ、およびレジスタで構成されています。レジスタは、データとアドレスを保持するプロセッサコンポーネントです。プログラムを実行するために、システムはそれを外部デバイスから内部メモリにコピーします。プロセッサはプログラム命令を実行します。

コンピュータストレージの基本単位は少しです。ON(1)またはOFF(0)の場合があり、8つの関連ビットのグループが、最近のほとんどのコンピューターで1バイトになります。

したがって、パリティビットは、バイト内のビット数を奇数にするために使用されます。パリティが偶数の場合、システムは、ハードウェア障害または電気的障害が原因である可能性があるパリティエラー(まれですが)があったと見なします。

プロセッサは次のデータサイズをサポートします-

  • Word:2バイトのデータ項目
  • ダブルワード:4バイト(32ビット)のデータ項目
  • クワッドワード:8バイト(64ビット)のデータ項目
  • 段落:16バイト(128ビット)領域
  • キロバイト:1024バイト
  • メガバイト:1,048,576バイト

2進数システム

すべての記数法は位置表記を使用します。つまり、数字が書き込まれる各位置は異なる位置値を持ちます。各位置は底の累乗であり、2進数システムの場合は2であり、これらの累乗は0から始まり、1ずつ増加します。

次の表は、すべてのビットがオンに設定されている8ビットの2進数の位置値を示しています。

ビット値 1 1 1 1 1 1 1 1
基数2の累乗としての位置値 128 64 32 16 8 4 2 1
ビット番号 7 6 5 4 3 2 1 0

2進数の値は、1ビットの存在とその位置の値に基づいています。したがって、指定された2進数の値は-です。

1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255

2と同じである8 1 - 。

16進数システム

16進数システムは基数16を使用します。このシステムの数字の範囲は0〜15です。慣例により、文字A〜Fは、10進数値10〜15に対応する16進数を表すために使用されます。

コンピューティングでの16進数は、長い2進表現を短縮するために使用されます。基本的に、16進数システムは、各バイトを半分に分割し、各ハーフバイトの値を表すことによってバイナリデータを表します。次の表に、10進数、2進数、および16進数に相当するものを示します。

10進数 バイナリ表現 16進表現
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

2進数を16進数に変換するには、2進数を右から順に4つの連続したグループのグループに分割し、それらのグループを16進数の対応する桁に書き込みます。

Example −2進数10001100 11010001は16進数に相当-8CD1

16進数を2進数に変換するには、各16進数を4桁の同等の2進数に書き込むだけです。

Example −16進数のFAD8は2進数と同等です-11111010 1101 1000

バイナリ演算

次の表は、2進加算の4つの簡単なルールを示しています。

(私) (ii) (iii) (iv)
1
0 1 1 1
+0 +0 +1 +1
= 0 = 1 = 10 = 11

ルール(iii)および(iv)は、次の左位置への1ビットのキャリーを示しています。

Example

10進数 バイナリ
60 00111100
+42 00101010
102 01100110

負のバイナリ値はで表されます two's complement notation。この規則によれば、2進数を負の値に変換するには、ビット値逆にして1を加算します。

Example

53番 00110101
ビットを反転します 11001010
1を追加 0000000 1
番号-53 11001011

ある値を別の値から減算するには、減算する数値を2の補数形式に変換し、数値を加算します

Example

53から42を引く

53番 00110101
42番 00101010
42のビットを反転します 11010101
1を追加 0000000 1
番号-42 11010110
53-42 = 11 00001011

最後の1ビットのオーバーフローは失われます。

メモリ内のデータのアドレス指定

プロセッサが命令の実行を制御するプロセスは、 fetch-decode-execute cycle または execution cycle。それは3つの連続したステップで構成されています-

  • メモリから命令をフェッチする
  • 命令のデコードまたは識別
  • 命令の実行

プロセッサは、一度に1バイト以上のメモリにアクセスできます。16進数0725Hを考えてみましょう。この数には2バイトのメモリが必要です。上位バイトまたは最上位バイトは07で、下位バイトは25です。

プロセッサはデータを逆バイトシーケンスで格納します。つまり、下位バイトは下位メモリアドレスに格納され、上位バイトは上位メモリアドレスに格納されます。したがって、プロセッサが値0725Hをレジスタからメモリに移動すると、最初に25が下位メモリアドレスに転送され、07が次のメ​​モリアドレスに転送されます。

x:メモリアドレス

プロセッサがメモリから数値データを取得して登録すると、再びバイトが反転します。メモリアドレスには2種類あります-

  • 絶対アドレス-特定の場所の直接参照。

  • セグメントアドレス(またはオフセット)-オフセット値を持つメモリセグメントの開始アドレス。