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