コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」

コンピュータ系実験Ⅲ
「ワンチップマイコンの応用」
第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レジスタとリテラルの論理和
→