コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座 アセンブリ言語とは? こういう感じのものです。 ORG BSF CLRF BCF CLRF MOVLW MOVWF ・・・・ 0 STATUS,RP0 TRISB STATUS,RP0 PORTB 55H PORTB アセンブリ言語とは? プロセッサが解釈可能な言語(機械語)を人 間が理解可能な形にした低水準言語 ⇔高水準言語,高級言語 ex)C言語, Java ニーモニックともいう プロセッサごとに定義された命令を用いる プロセッサによって言語仕様が異なる Ex) PICとPentiumでは全く異なる命令 PICでは35種類の命令を使用する(実験書45~ 49ページ) 高級言語から機械語の流れ C言語から機械語までの流れは以下のようになる (同じ高級言語でもJavaは少し異なる) C言語のソースコード→(コンパイラ)→ アセンブリ言語→(アセンブラ,)→機械語 (→(リンカ)→実行コード) 最近のコンパイラではC言語から機械語への変換まで全 て行ってしまう コンパイルオプションでアセンブリ言語のコードを出力す ることもできる gccの場合は“-S”オプション 機械語とは? プロセッサが解釈可能な言語 ディジタル回路では0と1で表現される 下記の0と1の羅列がプロセッサでのなんら かの動作を示す 11000000000100 00000010001100 11000000010001 00011100001100 ・・・ 機械語とアセンブリ言語 機械語を人間が理解可能な形にしたもの 命令を見れば大体の動作の予想がつく 機械語 11000000000100 00000010001100 11000000010001 00011100001100 ・・・ アセンブリ言語 MOVLW 04H MOVWF 0CH MOVLW 11H ADDWF 0CH,W ・・・ 用語① アセンブル:アセンブリ言語で書かれたプログ ラムを機械語に変換すること アセンブラ:アセンブリ言語を機械語に変換す るプログラム アセンブリ言語 MOVLW 04H MOVWF 0CH MOVLW 11H ADDWF 0CH,W アセンブル 機械語 11000000000100 00000010001100 11000000010001 00011100001100 用語② アセンブリ言語の動作を示す部分をオペコー ド、引数を示す部分をオペランドという ADDWF 0CH,W オペコード オペランド アセンブリ言語の特徴 メモリやレジスタなど、計算資源を直接扱う C言語のような変数は存在しない C言語などのように変数に対してコンパイラがメ モリを割り当てたり、計算に使用するレジスタを決 めてくれたりはしない プロセッサの構造(レジスタの数や用途など) を知らないとプログラミングできない 一般に高級言語で書いたプログラムよりも高 速に動作する アセンブリ言語の用途 デバイスドライバやOSの一部 プロセッサのレジスタを直接操作する必要がある ため 組み込み機器向けのソフトウェア メモリサイズの節約 高速化のためのチューニング PICの構造 プログラムメモリ (EEPROM) 演算処理部 メモリ (レジスタ ファイル) 入 出 力 ポ ー ト PICの構造 プログラム メモリ プログラム カウンタ 命令 レジスタ レジスタ ファイル MUX W レジスタ ALU 入 出 力 ポ ー ト RA0~RA7 RB0~RB7 PIC(PIC16F84)上の資源 PIC上でプログラミングする際に使用する資 源は以下の通りである(実験書7~8ページ) プログラムメモリ:プログラムを格納するメモリ レジスタファイル:動作設定やデータ格納用メモリ STATUSレジスタ ポートの入出力設定、入出力 汎用レジスタ など Wレジスタ(Working Register): 演算する際に一時保存用に使用するレジスタ レジスタファイル 0B番地 0C番地 0D番地 4E番地 4F番地 ・・・ 0番地 1番地 2番地 ・・・ アドレスを指定する ことで、データの読 み書きができる 読み出し、書き込 みのいずれである かは命令によって 決定される 実験書13ページ参 照 ・・・ レジスタファイル PICの動作設定 0B番地 0C番地 0D番地 ステータス 外部との入出力 4E番地 4F番地 ・・・ 0番地 1番地 2番地 ・・・ 0番地から0B番地 まではSpecial Function Register (SFR)と呼ばれ、 用途が決まってい る ・・・ 0D番地 4E番地 4F番地 ・・・ 0C番地から4F番地 0番地 1番地 までは汎用レジスタ 2番地 であり、プログラム 実行中の一時デー タなどの保存に使用 0B番地 する 0C番地 ・・・ ・・・ レジスタファイル PICでのプログラミング Wレジスタにレジスタファイ ルの値を読み出す(または 直値をロード) その値とレジスタファイルの 値(または直値)で演算 レジスタ ファイル Wレジスタ ALU:Arithmetic Logic Unit 各種演算をするブロック ALU PICの命令① MOVE系 -MOVLW オペコードが”MOV”で始まるものはデータ転 送命令(データコピー含む) MOVLW (MOVe Literal to W) リテラル(literal,定数)をWレジスタに書き込む 例)MOVLW 04H 04HをWレジスタに書き込む(Hは16進数を示す) 新たに定数を読み込むときに用いる命令 PICの命令① MOVE系 -MOVF MOVF (MOVe File register) ファイルレジスタの内容を指定した書き込み先に 書き込む 例)MOVF 0CH,W 0CH番地(ファイルレジスタのアドレス)の内容をW レジスタに書き込む 例)MOVF 0CH,F 0CH番地に0CH番地の内容を書き込む(つまり何 も変わらない) ファイルレジスタの内容をWレジスタに読み出 すときに用いる命令 PICの命令① MOVE系 -MOVWF MOVWF (MOVe W to File register) Wレジスタの内容をファイルレジスタに書き込む 例)MOVWF 0CH Wレジスタの内容を0CH番地に書き込む Wレジスタの内容をファイルレジスタに格納す るときに用いる命令 計算結果の格納 データの一時退避 PICの命令① MOVE系 まとめ MOVE系の命令をまとめると、以下のようになる 定数の 読み込み MOVLW レジスタ ファイル MOVF Wレジスタ MOVWF PICの命令② 演算命令 ALUで実行する各種演算のための命令 足し算、引き算 論理演算(AND, シフト OR, NOT) PICの命令② 加算命令系 -ADDLW ADDLW (ADD Literal and W) Wレジスタにリテラルを加算して計算結果をWレジ スタに格納する 例) ADDLW 11H 11HとWレジスタの値を加算してWレジスタに格納 PICの命令② 演算命令 –ADD系 ADDWF (ADD W and File register) ファイルレジスタの指定した番地の値とWレジスタの値を加 算 例) ADDWF 0CH, W 0CH番地の値とWレジスタの値を加算してWレジスタに格 納 例) ADDWF 0CH, F 0CH番地の値とWレジスタの値を加算して0CH番地(ファイ ルレジスタ)に格納 加算命令にはADDだけでなく、1だけ増やすインクリ メント命令も存在する 他の演算命令の使い方もほぼ同じなので、説明は略 例) 04H 11H 04Hを0CH番地にロードし、 その値と11Hを加算する レジスタ ファイル プログラム MOVLW 04H MOVWF 0CH MOVLW 11H ADDWF 0CH,W 04H Wレジスタ 04H 15H 11H ALU 15H 04H 11H 実験書の訂正 実験書45ページ、ANDWF命令の説明 W with F → AND W with F 例:ADDWF REG0, F → ANDWF REG0, F 例のコメント:W+REG0 → REG0 AND REG0 1行目:ADD 実験書47ページ、IORLW命令の説明 1行目:Wレジスタとファイルレジスタの論理和 Wレジスタとリテラルの論理和 →
© Copyright 2024 ExpyDoc