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