説明付きの単純な8086アセンブリ言語プログラム

問題を排除するために楽器を試してください





アセンブリレベルのプログラミングは、低レベルにとって非常に重要です 組み込みシステム デザインは、ハードウェアを操作するためのプロセッサ命令にアクセスするために使用されます。これは最も原始的なマシンレベルの言語であり、より少ないクロックサイクル数を消費し、より少ないメモリを消費する効率的なコードを作成するために使用されます。 高水準プログラミング言語 。プログラマーが組み込みハードウェアに注意しなければならないプログラムを書くことは、完全なハードウェア指向のプログラミング言語です。ここでは、アセンブリレベルのプログラミング8086の基本を提供します。

アセンブリレベルプログラミング8086

アセンブリレベルプログラミング8086



アセンブリレベルプログラミング8086

ザ・ アセンブリプログラミング言語 ニーモニックを使用して開発された低水準言語です。マイクロコントローラまたはマイクロプロセッサは、0や1などのバイナリ言語しか理解できないため、アセンブラはアセンブリ言語をバイナリ言語に変換し、タスクを実行するためのメモリに格納します。プログラムを作成する前に、組み込み設計者はコントローラーまたはプロセッサーの特定のハードウェアについて十分な知識を持っている必要があるため、最初に8086プロセッサーのハードウェアを知る必要がありました。


プロセッサのハードウェア

プロセッサのハードウェア



8086プロセッサアーキテクチャ

8086は、シリアルバス、RAM、ROM、I / Oデバイスなど、すべてシステムバスを使用して外部からCPUに接続されているすべての周辺機器に対応するプロセッサです。 8086マイクロプロセッサには CISCベースのアーキテクチャ 、および32 I / Oのような周辺機器があります。 シリアル通信 、思い出と カウンター/タイマー 。マイクロプロセッサには、関数の読み取りと保存にメモリを必要とする操作を実行するプログラムが必要です。

8086プロセッサアーキテクチャ

8086プロセッサアーキテクチャ

アセンブリレベルのプログラミング8086は、メモリレジスタに基づいています。レジスターはの主要部分です マイクロプロセッサとコントローラ これらはメモリ内にあり、データをより高速に収集および保存する方法を提供します。乗算や加算などを実行してプロセッサまたはコントローラへのデータを操作する場合、データを処理および格納するためにレジスタが必要なメモリで直接操作することはできません。 8086マイクロプロセッサには、次のような命令に従って分類できるさまざまな種類のレジスタが含まれています。

汎用レジスタ :8086 CPUは8つの汎用レジスタで構成されており、各レジ​​スタには、図に示すように、AX、BX、CX、DX、SI、DI、BP、SPなどの独自の名前があります。これらはすべて16ビットレジスタであり、4つのレジスタがAX、BX、CX、DXなどの2つの部分に分割されており、主に数値を保持するために使用されます。

専用レジスタ :8086 CPUは、IPレジスタやフラグレジスタなどの2つの特殊機能レジスタで構成されています。 IPレジスタは現在実行中の命令を指し、常にCSセグメントレジスタと一緒に収集するように機能します。フラグレジスタの主な機能は、機械的機能が完了した後にCPU動作を変更することであり、直接アクセスすることはできません。
セグメントレジスタ:8086 CPUは、CS、DS、ES、SSなどの4セグメントレジスタで構成されており、主にセグメントレジスタにデータを格納するために使用され、セグメントレジスタを使用してメモリブロックにアクセスできます。


単純なアセンブリ言語プログラム8086

アセンブリ言語プログラミング8086には、次のようないくつかのルールがあります。

  • アセンブリレベル プログラミング8086 コードは大文字で書く必要があります
  • ラベルの後にはコロンを付ける必要があります。例:label:
  • すべてのラベルと記号は文字で始まる必要があります
  • すべてのコメントは小文字で入力されます
  • プログラムの最後の行は、ENDディレクティブで終了する必要があります

8086プロセッサには、データにアクセスするための他の2つの命令があります。たとえば、ワード(2バイト)の場合はWORD PTR、バイトの場合はBYTE PTR –です。

オペコードとオペランド

オペコードとオペランド

オペコード: 単一の命令は、CPUで実行できるオペコードと呼ばれます。ここでは、「MOV」命令はオペコードと呼ばれています。

オペランド: 単一のデータはオペランドと呼ばれ、オペコードで操作できます。たとえば、減算演算は、オペランドによって減算されるオペランドによって実行されます。
構文: SUB b、c

8086マイクロプロセッサアセンブリ言語プログラム

キーボードから文字を読み取るためのプログラムを作成する

MOV ah、1h //キーボード入力サブプログラム
INT 21h //文字入力
//文字はalに格納されます
MOV c、al //アルトcから文字をコピー

文字を読んで表示するためのプログラムを書く

MOV ah、1h //キーボード入力サブプログラム
INT 21h //文字をalに読み込む
MOV dl、al //文字をdlにコピー
MOV ah、2h //文字出力サブプログラム
INT 21h // dlで文字を表示する

汎用レジスタを使用してプログラムを作成する

ORG 100h
MOV AL、VAR1 // VAR1をALに移動して値を確認します。
LEA BX、VAR1 // BXでVAR1のアドレスを取得します。
MOV BYTE PTR [BX]、44h // VAR1の内容を変更します。
MOV AL、VAR1 // VAR1をALに移動して値を確認します。
正しい
VAR1 DB 22h
終わり

ライブラリ関数を使用して文字列を表示するためのプログラムを作成する

include emu8086.inc//マクロ宣言
ORG 100h
「HelloWorld!」を印刷します
GOTOXY 10、5
PUTC 65 // 65 –「A」のASCIIコードです
PUTC「B」
RET //オペレーティングシステムに戻ります。
END //コンパイラを停止するディレクティブ。

算術および論理命令

算術および論理ユニットの8086プロセスは、加算、除算、インクリメント操作などの3つのグループに分かれています。最も 算術および論理命令 プロセッサステータスレジスタに影響します。

アセンブリ言語プログラミング8086ニーモニックは、操作を実行するために使用されるMOV、MUL、JMPなどのオペコードの形式です。アセンブリ言語プログラミング8086の例

添加
ORG0000h
MOV DX、#07H //値7をレジスタAXに移動します//
MOV AX、#09H //値9をアキュムレータAXに移動//
Add AX、00H // R0値でCX値を追加し、結果をAX //に格納します
終わり
乗算
ORG0000h
MOV DX、#04H //値4をレジスタDX //に移動します
MOV AX、#08H //値8をアキュムレータAXに移動//
MUL AX、06H //乗算された結果はアキュムレータAXに格納されます//
終わり
減算
ORG 0000h
MOV DX、#02H //値2をレジスタDX //に移動します
MOV AX、#08H //値8をアキュムレータAXに移動//
SUBB AX、09H //結果値はアキュムレータAX //に格納されます
終わり
分割
ORG 0000h
MOV DX、#08H //値3をレジスタDXに移動//
MOV AX、#19H //値5をアキュムレータAXに移動//
DIV AX、08H //最終値はアキュムレータAXに格納されます//
終わり

したがって、これはすべて、アセンブリレベルプログラミング8086、8086プロセッサアーキテクチャの8086プロセッサ用の簡単なサンプルプログラム、算術演算および論理命令です。さらに、この記事または電子プロジェクトに関する質問がある場合は、以下のコメントセクションにコメントしてお問い合わせください。