83日目 学習記録:コンピュータハードウェア技術の基礎:アセンブリ言語プログラミング

1. アセンブリ言語命令

アセンブリ言語の文は命令体系に基づいて構成されており、その機能とコンパイル条件に応じて命令文(記号命令)と指示文(擬似命令)の2つに分類されます。
命令ステートメントは、CPU に特定の操作を実行するように命令する機械命令に対応する実行可能なステートメントであり、その機能はハードウェアによって実行されます。命令文は、対応する機械命令を持たない記述文であり、アセンブラのコンパイル情報とリンカの接続情報のみを提供し、その機能は対応するソフトウェアによって実現されます。
命令文と命令文の形式は基本的に同じで、
ラベル:シンボル命令; コメント
変数名 擬似命令; コメント 命令
文では、通常、ある命令をそのまま使用する場合にはラベルは必要ありません。転送命令のターゲットを指定するには、命令の前にラベルを追加します。ラベルと命令の間にはコロンを使用する必要があります。

1. 基本的な文法構成要素

1. 名前
名前は、特定の文法要素を識別するために使用され、システム規定とユーザー定義の 2 種類があります。
(1) ラベルと変数
ラベルとは、特定のコードセグメント内でのみ使用できるコロンを付けた名前で、命令アドレスを表し、転送命令の転送先を示します。変数は、メモリ内のデータまたはデータ領域を記号的に表現したもので、通常はデータ セグメント、追加セグメント、またはスタック セグメントで定義され、メモリ オペランドの格納アドレスを表すか、変数名で特定の単位を表します。
ラベルと変数には、
①セグメント属性
、②オフセット属性、
③型属性の 3 つの属性があります。
(2) 定数
定数は、アセンブリ時に明確な値を持ち、即値、文字列定数、シンボル定数の 3 つの形式があります。
2. 演算子
(1) 数値演算子
① 算術演算子
② 論理演算子
③ 関係演算子
EQ(等しい)、NE(不等)、GT(より大きい)、LT(より小さい)、GE(以上) 、LE (以下)。
(2) 属性を変更するための
演算子 アセンブリ言語には PTR 演算子が用意されています。
型指定子 PTR アドレス式
型指定子は、BYTE (バイト)、WORD (ワード)、DWORD (漢字)、FAR (遠い)、NEAR (近い) です。
アセンブリ言語では、PTR 演算子の概念が高級言語とは少し異なります。通常、アセンブリ言語はアドレス アドレッシング モードを使用してメモリ内のデータにアクセスします。PTR 演算子の機能は、データのアドレスをポインタ変数に渡すことです。これにより、ポインタ変数をアセンブリ プログラムで使用してデータを操作できるようになります。記憶の中で。
PTR 演算子の構文は、アセンブリ言語によって異なる場合があります。たとえば、x86 アセンブリ言語では、PTR 演算子は角かっこ "[]" で表され、その形式は次のとおりです。

MOV BX, [PTR WORD_VAR]

上記のコードは、PTR 演算子を使用して WORD_VAR という名前の変数のアドレスを取得し、それを BX レジスタに格納します。角括弧「[]」は PTR 演算子の一部であることに注意してください。これは、角括弧内の内容がメモリ アドレスとして解釈され、そのアドレスに格納されているデータを操作できることを意味します。

アセンブリ言語では、変数のアドレスは通常セグメント アドレスとオフセット アドレスの形式で表現されるため、PTR 演算子を使用する場合はこれを考慮する必要があることに注意してください。
(3) 属性または値を返す演算子
①SEG 演算子
形式:SEG 変数名またはラベル
機能:変数名(またはラベル)のセグメントベースアドレスを計算します。
②OFFSET 演算子
形式:OFFSET 変数名またはラベル
機能:変数名を計算します(またはラベル) アドレス オフセット
③TYPE 演算子
形式: TYPE 変数名またはラベル
機能: 変数またはラベルの型を計算、バイト変数の場合は戻り値 1、フォント変数の場合は戻り値 2、ダブルワード変数の場合は戻り値④
$ 演算子: $ 演算子は、アセンブリ カウンタの現在の値を返します。具体的な使用法については、「バイト定義ディレクティブ」を参照してください。
(4) 角括弧演算子とアドレス式 角括弧で囲まれたアドレス式は、メモリのオペランドにアクセスする際によく使用されるアドレス指定方法です。角括弧のもう 1 つの使用法は、配列の添え字を示すことです。これは、定数、算術式、または 16 ビット アドレッシング モードの式にすることができます。

2. 疑似命令

1. データ定義疑似命令に
は、変数を定義したり、記憶領域を確保したりするための DB、DW、DD があります。
(1) バイト定義擬似コマンド
形式:変数名 DB バイトデータをカンマで区切った文字列
機 能:定義したバイトデータを 2 進数に変換し、指定した変数単位から順に格納します。
(2)ワード定義擬似コマンド
形式:変数名DW、フォントデータをカンマで区切った文字列
機能:定義したフォントデータを指定された変数単位から順に格納、各フォントデータの格納規則:下位バイトをワード定義に格納下位アドレス単位に変換され、上位バイトが上位アドレス単位に変換されます。
(3) ダブルワード定義擬似命令
形式:変数名 DD、カンマ区切りのダブルワードデータ列
機能:指定された変数名から順に DD で定義した番号を 4 単位で格納格納規則も、下位バイトは下位アドレス単位に格納され、上位バイトは上位アドレス単位に格納されます。
2. シンボル定義指令
(1) 等価指令
形式:変数名 EQU 式
機能:式の値を変数に代入します。
(2) 等号指令の
形式:変数名 = 式
3、セグメント定義指令
(1) SEGMENT および ENDS 指令
SEGMENT および ENDS を使用してセグメントを定義します。 形式:
セグメント名 SEGMENT ポジショニングパラメータ リンクパラメータ 'カテゴリ名'
セグメント 定義本体
セグメント名終了
①位置決めパラメータ:
BYTEはバイトアドレスを意味します。つまり、この論理セグメントのターゲットコードを任意のアドレスから順に格納できます。
WORDはワードアドレス、つまり論理セグメントのオブジェクトコードを表し、偶数アドレスから順に格納される。
PARA(デフォルト)はセクションアドレス(1セクションが16B)を示します。つまり、論理セグメントのオブジェクトコードが16で割り切れるアドレスから順に格納されます。
PAGEはページアドレス、つまり論理セグメントのターゲットコードを表し、256で割り切れるアドレスから順に格納されます。
②リンクパラメータ:
PUBLIC、MEMORY、COMMON、STACK、AT式、セグメント定義のデフォルトのセグメント属性パラメータの場合、セグメントが独立した論理セグメントであることを示します。
③'カテゴリ名': カテゴリ名はプログラマが選択した文字列です。使用する場合はシングルクォーテーションで囲む必要があります。カテゴリ名はオプションです。
(2) ASSUME 擬似命令
形式: ASSUME セグメントレジスタ名:セグメント名、セグメントレジスタ名:セグメント名、...
機能: ASSUME 文は、どのセグメントレジスタが論理セグメントのアドレス指定に使用されるかをアセンブラに通知します。
(3) ORG擬似コマンド
形式:ORG数値式
機能:ターゲットプログラムのオフセットまたはデータ領域の先頭記憶単位を指定するために使用します。
4. プロセスとマクロ定義の擬似命令
(1) プロセス定義の擬似命令
プロセスはサブルーチンとも呼ばれ、プログラムの一部であり、リターン命令として RET を使用し、プロセス定義文で区切る必要があります。サブルーチン。
(2) マクロ定義擬似命令
マクロの概念はプロセスと非常に似ています。
(3) 条件付きアセンブル指令
(4) ソースプログラム終了指令

2. アセンブリ言語によるプログラミング方法

(1) タスクの定義
(2) フローチャートの描画
(3) メモリの作業単位とレジスタの割り当て
(4) プログラミングとデバッグ

1. 分岐構造のプログラム設計

(1) 単純な分岐構造プログラム:
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
2. 多方向分岐構造プログラム
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

2. 循環プログラミング

1. 単一サイクルプログラム
ここに画像の説明を挿入
ここに画像の説明を挿入
2. 複数サイクルプログラム
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

3. サブルーチンの設計

1. サブルーチンの呼び出しと復帰
サブルーチンの呼び出しと復帰は、CALL 命令と RET 命令によって完了します。
2. サブルーチンのパラメータ転送
サブルーチンを使用する場合、解決すべき重要な問題はパラメータの転送です。
①レジスタを使用してパラメータを送信します。
②スタックを使用してパラメータを転送します。
③ メモリユニットを使用してパラメータを送信します。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
方法 2:
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
3. サブルーチンの入れ子と再帰
(1) サブルーチンの入れ子
(2) 再帰サブルーチン
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

DOS および BIOS 関数呼び出し

1. DOS 割り込みと関数呼び出し
(1) DOS 特殊割り込み
(2) DOS 呼び出し可能割り込み
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
2. BIOS 割り込み呼び出し
(1) キーボード I/O 割り込み呼び出し
ここに画像の説明を挿入
(2) プリンター I/O 割り込み呼び出し
ここに画像の説明を挿入
(3) ディスプレイ I/O 割り込み電話
ここに画像の説明を挿入

5. モジュール型プログラム設計

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

3. アセンブリ言語プログラミングの例

1. 数値計算

1. マルチバイト減算
例 4.16 2 つの組み合わせの 4 ビット BCD 数値の差を計算してみます。演算に関わる2つのオペランドをそれぞれDAT1、DAT2をアドレスとする記憶装置に格納し、その結果をRESULT装置に格納し、ローフロント、ハイバックの形式でデータを格納するとする。
ここに画像の説明を挿入
2. マルチバイト乗算
ここに画像の説明を挿入

2. コード変換

1. 10進コードからバイナリコードへの変換
ここに画像の説明を挿入
ここに画像の説明を挿入
2. バイナリコードからASCIIコードへの変換
ここに画像の説明を挿入

			MOV   AH ,4CH     ;返回DOS
			INT   21H
	CODE	ENDS
			END	  START

3. 文字データ処理

1. 文字の検索
ここに画像の説明を挿入
ここに画像の説明を挿入
2. 文字の削除
ここに画像の説明を挿入
ここに画像の説明を挿入
アセンブリ言語命令の機能とは何ですか?
アセンブリ言語命令は、コンピュータのハードウェアとレジスタを直接操作する低レベルの機械語命令を記述するために使用されます。アセンブリ言語は、コンピューターのハードウェアやアーキテクチャに近い低レベル言語です。

アセンブリ言語命令の主な機能には次の側面が含まれます。

制御フロー: アセンブリ言語命令は、条件分岐 (if ステートメントなど)、ループ (while ループなど)、ジャンプ (goto ステートメントなど) などのプログラムの制御フローを実装できます。これらの命令は、特定の条件またはフラグに基づいてプログラムの実行パスを変更します。

データ操作: アセンブリ言語命令は、データのレジスタへのロード、レジスタからメモリへの書き戻し、レジスタ間の算術演算 (加算、減算など) や論理演算 (and など) の実行など、データに対してさまざまな操作を実行できます。または、そうでないなど)。

メモリへのアクセス: アセンブリ言語命令はコンピュータのメモリにアクセスし、データの読み取りと書き込みを行います。メモリ内のデータは、メモリ アドレスを指定し、さまざまなメモリ アクセス モードを使用することで読み取りまたは変更できます。

割り込みと例外の処理: アセンブリ言語命令は、コンピューター ハードウェアによって生成された割り込みと例外を処理するために使用されます。割り込みベクタテーブルを設定し、対応する割り込みハンドラを記述することで、外部イベント(ハードウェアデバイスからの信号など)や異常状態(除算エラーやページフォルト例外など)に応答できます。

オペレーティング システム呼び出し: アセンブリ言語命令はオペレーティング システム呼び出しを行い、プログラムがオペレーティング システムと対話できるようにします。オペレーティングシステムが提供するインターフェースを介して、ファイル操作、ネットワーク通信、プロセス管理などの機能を実現できます。

アセンブリ言語命令は、高級言語と基盤となるコンピューター ハードウェアの間の橋渡しとして機能し、高級言語で記述されたコードを機械語命令に変換し、コンピューター ハードウェアと直接対話して制御する役割を果たします。

おすすめ

転載: blog.csdn.net/weixin_45694614/article/details/131290647