1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

Similar documents
スライド 1

Taro11-…e…L…X…g.jtd

スライド 1

PowerPoint プレゼンテーション

Microsoft PowerPoint - 工学ゼミⅢLED1回_2018

スライド 1

CASL入門

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

実習内容 PIC18C242 のポート B に接続した LED を点滅させます ( 他の実習と同じ内容です ) 8 個の LED に表示される値が +3 ずつインクリメントします MPLAB を使って MPASM アセンブラのソース ファイルをアセンブルします MPLAB とソース ファイルは配布し

スライド 1

untitled

ex04_2012.ppt

,, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC (

スライド 1

Microsoft Word - 工学ゼミ3_テキスト

PowerPoint プレゼンテーション

Microsoft Word - 4章.doc

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

も 常に 2 つのコイルに電圧を印加する 2 層励磁方式や 1 つのコイルと 2 つのコイルに交互に電圧を印 2

3 4 PIC

余白 : 上下 25.4mm, 左右 19mm (Word2012 での やや狭い 設定 ) マイコンプログラミング演習 I レポート 1 実験日 提出日 回路構築 /LED を用いた I/O 制御 [16pt] 班員と担当責任者第 0 班レポート作成

3 1EEPROMElectrically Erasable PROM PROMProgrammable ROM 2 EEPROM 3

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

2. アーキテクチャ 概 要 PIC16F8x ファミリは 命 令 語 長 14bit の RISC[1]で 命 令 は35 種 類 である 1 命 令 は4クロックで 実 行 されるが 実 際 にはパイプライン 処 理 [2]されている ノイマン 型 コンピュータ[3]と 違 いプログラムとデータ

PowerPoint プレゼンテーション

スライド 1

PIC (, 2, 3 ) PIC ( 1, 2, 3 ) 1 2 (, 2 ) PIC ( 1, 2 ) 2.1 (p.34) define #define (define ) (p.61) 1 30 (RD 7 /P SP 7 ) 32 (V DD ) IC

スライド 1

JavaプログラミングⅠ

JavaプログラミングⅠ

PowerPoint プレゼンテーション

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

untitled

PowerPoint Presentation

Microsoft Word - 工学ゼミ3_テキスト

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

PIC18 Istructios PIC16, PIC x Microchip Techology Icorporated. All Rights Reserved. PICmicro PIC18 52

ex05_2012.pptx

PowerPoint プレゼンテーション

前付(念).indd

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

計算機アーキテクチャ

BANK1 MOVLW b' ' PIC16F648A独自 MOVWF CMCON コンパレータ OFF BCF INTCON,PEIE 周辺割り込み OFF PIC16F648A独自 MOVLW B' ' RB2/TX, RB1/RX PIC16F648A独自 MOVW

Microsoft Word - 組込みプログラミング2018テキスト

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Microsoft Word - no103.docx

2 ASCII コードと文字型変数 2-1 ASCII コード 文字 コードコードコードコードコードコードコードコード文字文字文字文字文字文字文字 10 進 10 進 10 進 10 進 10 進 10 進 10 進 10 進 0 16 SP P 80 ` 96 p 112

Excel データ出力ガイドブック 第 1.0 版平成 30 年 9 月 1 日制定 株式会社中電シーティーアイ

Microsoft PowerPoint - kougi4.ppt

スライド 1

目次

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

プログラミング実習I

UNIX 初級講習会 (第一日目)

文法と言語 ー文脈自由文法とLR構文解析2ー

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

プログラミング基礎

CASL入門

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

コンピュータ工学Ⅰ

プレポスト【解説】

講習No.1

1. 購入物品リスト 電子部品名 用途 規格 単価 数量 合計 購入先 PIC16F84A-20/P PIC16F 秋月電子通商 カーボン抵抗 1/4W R0,R1 10kΩ 秋月電子通商 カーボン抵抗 1/4W R2,R2 追加分 300Ω 秋月

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

02: 変数と標準入出力

株式会社アルウィン C 言語コーディング規約 ver.0.1

スライド 1

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

Microsoft PowerPoint - C_Programming(3).pptx

Taro-Basicの基礎・条件分岐(公

_unix_text_command.pptx

JavaScriptプログラミング入門 2.JavaScriptの概要

BSF PORTA BCF PORTA MOVLWB MOVLWB MOVLWB MOVLWB , E=1, E=0 8 ビット 行表示 ディスプレイ制御 表示クリア エントリーモード CALLDSP MAIN BCF PORTA,3 R

第 1 回 C 言語講座 1. コンピュータって? だいたいは 演算装置 制御装置 記憶装置 入出力装置から構成されている 演算装置 CPU の一部で実際に計算を行う装置 制御装置 CPU の一部で演算装置や入出力装置 記憶装置の読み書きなどを制御する装置 記憶装置プログラムや情報 データを一時的

卒 業 研 究 報 告

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - 4.ppt [互換モード]

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Java講座

Microsoft PowerPoint - 3.ppt [互換モード]

コンピュータ工学Ⅰ

Microsoft PowerPoint - prog04.ppt

変更履歴 版数変更日変更内容 /9/1 初版設定

Microsoft PowerPoint - kougi7.ppt

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

Microsoft Word - テキスト.docx

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

第2回講義:まとめ

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

演算増幅器

# 深く掘り下げる C++ 講座 < 第 2 回 > // 先に先週の内容の解説 r ( キャリッジリターン ) 行の先頭に戻る 語源はタイプライターからだそうです とりあえず 以下に rを使ったくるくる回る顔文字のソース 注 : 以下のソースはmacのターミナル上での動作のみ保証 例 ) #inc

Microsoft PowerPoint - ProcML-12-3.ppt

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

スクールCOBOL2002

Transcription:

MPASM MPASM は Microchip Tecnology Inc. 社の開発した PIC のためのアセンブリ言語である ここでは MPASM の文法と使用法などについて記述する 1. 文法 ソースコードファイルは ASCII テキストファイルエディターを使って作成する そのように作られたソースコードは以下に示す基本的ガイドラインに従うべきである ソースファイルの各行は次の 4 つのタイプの情報を含んでよい ラベル ニーモニック オペランド コメント 命令とこれらの位置づけは重要である ラベルはカラム 1 から始まらなければならない ニーモニックはカラム 2 かそれ以降から始まらなければならない オペランドはニーモニックに続く コメントはラベル ニーモニック オペランドに続くか 如何なるカラムから始まっても良い カラムの幅の最大値は 255 文字である ホワイトスペースかコロンはラベルとニーモニック ニーモニックとオペランドを区切らなければならない 複数オペランドはコンマによって区切られる 次に例を示す Sample MPASM Source Code. For illustration only. list p=16f54 Dest equ h'0b' org H'01FF' Start org H'0000' Start movlw H'0A' movwf Dest bcf Dest,3 Start end

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが コマンドラインで上書きできる ラベルの定義でコロンが使われた場合 それはラベルオペレーターとして扱われ ラベル自身としては扱われない 1.2 ニーモニック アセンブラ命令ニーモニック アセンブラ指令 マクロ呼び出しはカラム 2 かそれ以上から始まらなければならない 同じ行でこれらがラベルである場合 命令はそのラベルからコロンか 1 つ以上の空白 もしくはタブで区切られなければならない 1.3 オペランド オペランドはニーモニックから一つ以上の空白かタブで区切られなければならない 複数オペランドはコンマで区切られる 1.4 コメント MPASM はセミコロン以降をコメントとみなす セミコロンに続く全ての文字は改行が現れるまでの間無視される セミコロンを含んでいる文字列定数は許されており コメントとともに拒否されない

2. 使用法 MPASM は前掲した命令セットを全て使うことが出来る 使用法は前掲したとおりである ここでは主に式構文とアセンブラ指令などについて記述する 2.1 PIC16F8X 命令セット PIC16F8X 命令セットは前掲したとおりのニーモニックで使用可能である オペランドは MPASM の式によって渡すわけだが 特殊機能レジスタのアドレスなどは予め P16F84A.INC というファイルでラベルとして定義されている このファイルを include 指令で読み込むことによってより解りやすく プログラムを記述することが出来る STATUS レジスタの Z フラグをテストすることを考えてみよう STATUS レジスタはデータメモリの bank0 0x03 番地にある Z フラグはその 3 ビット目である このビットをテストするのに 例えば btfsz 命令を使うとすると btfsz 0x03,3 となる P16F84A.INC には次の定義がある STATUS EQU H'0003' Z EQU H'0002' EQU 指令は同義語を作る指令である H'~' というのは 16 進数であること示す (0x~ と同じ ) この定義を使って同じ内容を書くと以下のようになる btfsz STATUS,Z このほうが STATUS レジスタの Z ビットをテストしている という事が解り易いだろう もう一例挙げてみよう addwf 命令を使ってワーキングレジスタと指定したレジスタの内容を足し合わせる この命令にはオペランドが 2 つあり 1 つ目は演算対象のレジスタのアドレス 2 つ目は演算結果の格納先で 0 ならワーキングレジスタ 1 なら第一オペランドのアドレスに格納される いまワーキングレジスタと 0x0c 番地のレジスタの内容を足し合わせて結果をワーキングレジスタに格納したいとする インクルードファイルによる定義なしで書くと以下のようになる addwf 0x0c,0

P16F84A.INC には以下の定義がある W EQU H'0000' F EQU H'0001' これを用いて書くと addwf 0x0c,W となる W= ワーキングレジスタ F= ファイルレジスタと覚えておけば この方が解り易いだろう 2.2 式構文 MPASM の式には演算子などを使って計算する機能などもあるが 今回の範囲ではそこまでは必要ない ここでは基数ごとの数値リテラルの書き方について説明する 以下の表にまとめた 基数構文例 10 進数 D'<digits>' D'100' 16 進数 H'<hex_digits>' 0x<hex_digits> H'9f' 0x9f 8 進数 O'<octal_digits>' O'777' 2 進数 B'<binary_digits>' B'00111001'

2.3 よく使うアセンブラ指令 ORG Set Program Origin 構文 [<label>] ORG <expr> 説明 この指令に続くニーモニックを <expr> で指定されるアドレスにおく 例えば org movlw movwf 0x04 B'00110011' 0x0c とすると org に続く movlw 命令以降の命令はプログラムメモリの 0x04 番地以降に置かれる これを指定しなかった場合 命令は 0x00 番地から順に置かれる EQU Difine an Assembler Constant 構文 <label> EQU <expr> 説明 <label> の文字列を <expr> で指定した値として関連付ける 例えば次のようにする hoge equ 0x0c このようにすると 式を必要とする場所で hoge と書くと hoge は 0x0c という数値に展開される 汎用レジスタを変数として使いたい場合に便利である

CBLOCK Define a Block of Constants 構文 cblock <label> <label> endc [<expr>] 説明 <expr> で指定される値から始まる定数のリストを作る <expr> が指定されない場合 最初の CBLOCK 指令なら 0 から 2 番目以降の CBLOCK 指令なら前の CBLOCK 指令の最後の値から始まる 例えば以下のようにする cblock 0x0c 汎用レジスタの開始アドレス var_1 var_2 var_3 endc これで var_1 = 0x0c var_2 = 0x0d var_3 = 0x0e として展開される 大量の一続きの汎用レジスタを変数として使いたい場合に便利である

3. イディオム ここではプログラムの中でよく使う手法を幾つか説明する 任意の汎用レジスタに任意の値を入れる 任意のレジスタに任意の値を入れる といった命令は無い しかし ワーキングレジスタに任意の値をロードする命令とワーキングレジスタの値を任意のレジスタに転送する命令はあるので この二者を使う 0x0c 番地のレジスタに 255 をいれる movlw movwf H'FF' 0x0c フラグをテストして分岐する 演算結果フラグは STATUS レジスタにある また割り込み使用時も割り込み要因特定のためにフラグをテストすることがある 任意のレジスタの任意のビットがクリアされているかセットされているかをテストする命令として btfss 命令と btfsz 命令がある この両者の命令は テスト結果が真であればその次の命令をスキップする ( 次の命令を NOP 命令に置き換える ) btfss 命令は指定したレジスタの指定したビットがセットされていればスキップする btfsz 命令は指定したレジスタの指定したビットがクリアされていればスキップする これらスキップ命令と 命令等のジャンプ命令を組み合わせて分岐を実現する 例えば以下のように書く C フラグが立っていればワーキングレジスタに 255 を そうでなければ 0 をロードする btfss movlw STATUS,C lb0 H'FF' lb1 lb0 movlw H'00' lb1

大小比較 任意のレジスタの値と任意の値を比較する 比較命令は無いので 減算して演算結果フラグをテストする 0x0c 番地の内容が 10 より大きいか小さいか subwf btfss 0x0c,W STATUS,DC lb0 大きいの場合の実行内容 lb1 lb1 N 回ループ 小さいの場合の実行内容 任意回数のループは decfsz 命令を使うと便利である decfsz 命令は指定したレジスタの値をデクリメントして値がゼロならば次の命令をスキップする 格納先は W と F で選べるが この場合は F を指定して使う 10 回ループする cnt equ 0x0c 0x0c 番地をカウンタ変数として使う lb0 movlw D'10' movwf cnt ループの処理内容 decfsz cnt,f lb0

定数テーブルを作成する 定数テーブルを作るには retlw 命令を使うと便利である retlw 命令はオペランドとしてリテラルをとりそのリテラルをワーキングレジスタにロードし 戻り番地へ戻る この命令を使う方法では プログラムカウンタを操作する必要がある これについては 後述する PORTA の下位 2ビットを見て 次のテーブルで与えられる値をワーキングレジスタにロードして戻るサブルーチン 00 10 01 20 10 30 11 40 table movlw B'00001' movwf PCLATH movlw B'00000011' andwf PORTA,W PORTA の下位 2ビット以外をマスク movwf PCL org retlw retlw retlw retlw B'0000100000000' D'10' D'20' D'30' D'40' プログラムカウンタの変更のしかた プログラムカウンタは 13bit である 対応するレジスタは PCLATH レジスタと PCL レジスタで それぞれプログラムカウンタの上位 5bit と下位 8bit である PCLATH レジスタをライトした値は次回 PCL レジスタをライトしたときにプログラムカウンタに反映される PCLATH レジスタは書き込みバッファである プログラムカウンタを変更したいときは先ず PALATH レジスタにライトし それから PCL レジスタにライトする