アセンブリ-はじめに
アセンブリ言語とは何ですか?
各パーソナルコンピュータには、コンピュータの算術、論理、および制御アクティビティを管理するマイクロプロセッサがあります。
プロセッサの各ファミリには、キーボードからの入力の取得、画面への情報の表示、その他のさまざまなジョブの実行など、さまざまな操作を処理するための独自の命令セットがあります。これらの一連の命令は「機械語命令」と呼ばれます。
プロセッサは、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種類あります-
絶対アドレス-特定の場所の直接参照。
セグメントアドレス(またはオフセット)-オフセット値を持つメモリセグメントの開始アドレス。