約 2,077,627 件
https://w.atwiki.jp/tenken3ps/pages/181.html
PICの全体アーキテクチャ データメモリのアーキテクチャSFR(Special Function Register)INDFレジスタ TMR0レジスタ STATUSレジスタTOフラグ PDフラグ Zフラグ DCフラグ Cフラグ OPTION_REGレジスタ FSRレジスタ INTCONレジスタ PIE1レジスタ PIR1レジスタ PIE2レジスタ PIR2レジスタ PCONレジスタ PCLレジスタ PCLATHレジスタ EEADRレジスタ EEADRHレジスタ EECON1レジスタ EECON2レジスタ OSCTUNEレジスタ OSCCONレジスタ フラグ クロック 命令のアーキテクチャバイト処理命令 ビット処理命令 リテラル処理命令 ジャンプ命令 演算方法2進数加算 2進数減算・符号付2進数 補数 2進数乗算 2進数余算 2進数・10進数変換 10進数・16進数変換 論理演算論理積演算(AND) 論理和演算(OR) 排他的論理和演算(XOR) 否定演算(NOT) 記号説明 命令一覧加減算命令ADDWF SUBWF ADDLW SUBLW 論理演算命令ANDWF IORWF XORWF COMF ANDLW IORLW XORLW 移動・転送命令MOVF MOVWF MOVLW CLRF CLRW カウントアップダウン命令・FOR文DECF INCF DECFSZ INCFSZ ビット操作命令・IF文・CASE文BCF BSF BTFSC BTFSS 巡回シフト命令RLF RRF SWAPF ジャンプ命令・サブルーチンGOTO CALL RETURN RETFIE RETLW その他CLRWDT NOP SLEEP PICの全体アーキテクチャ ①命令の取り出し(Fetch) 起動・初期化を終えると、プログラムメモリの命令レジスタから命令のフェッチ(取り出し)がされる。 ②命令の解読(Decode) 命令を解読し、演算・制御指示をする。 ③演算データの転送と演算実行(Execute) ALUやMUXで演算処理がなされる。 ④結果の転送と格納(Write-Back) Wレジスタやfレジスタへ結果が転送され、格納される。さらに、その結果の状態(正負、ゼロ)はSTATUSレジスタに記憶される。 ⑤周辺機器の制御 演算結果の格納先がSFRであった場合、動作制御が行われる場合がある。 ⑥次の命令へ(①へ戻る) プログラムカウンタが+1されて、次の命令が実行される。 データメモリのアーキテクチャ 一例として、PIC16F88のデータメモリのアーキテクチャを掲載する。これらの内容はPICごとに異なっているので、データシートで確認する必要がある。 SFR(Special Function Register) SFRとは、PICの入出力や各種モード設定などに使う特別なレジスタのこと。 INDFレジスタ TMR0レジスタ STATUSレジスタ 演算結果の各種フラグと、データメモリのBank指定のビットを含んでいる。 レジスタファイルの3番地としてすべてのデバイスで共通であるとともに、すべてのBankのアドレス3番地の位置に用意されている。 IRP RP1 RP0 TO PD Z DC C TOフラグ 電源がONにされた時か、CLRWDT命令もしくはSLEEP命令が実行された時、フラグが立ち、TOフラグビット=1となる。 また、ウォッチドッグタイマがタイムアウトした時、TOフラグビット=0となる。 PDフラグ 電源がONにされた時か、CLRWDT命令が実行された時、フラグが立ち、PDフラグビット=1となる。 また、SLEEP命令が実行された時、PDフラグビット=0となる。 Zフラグ 演算結果が0の時、フラグが立ち、Zフラグビット=1となる。 DCフラグ 演算結果の下位4ビットからの繰り越しがある時、フラグが立ち、DCフラグビット=1となる。 Cフラグ 演算結果の最上位ビットからの繰り越しがある時、フラグが立ち、Cフラグビット=1となる。 OPTION_REGレジスタ 各種のPIC内部の制御を行うためのレジスタ。すべてのビットを読み書きすることができる。 RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 FSRレジスタ INTCONレジスタ PIE1レジスタ PIR1レジスタ PIE2レジスタ PIR2レジスタ PCONレジスタ PCLレジスタ PCLATHレジスタ EEADRレジスタ EEADRHレジスタ EECON1レジスタ EECON2レジスタ OSCTUNEレジスタ OSCCONレジスタ フラグ 特定の結果や条件・状態を保存しておくための、領域やシステムのこと。 フラグは1ビット幅であることが多いため、2通りの情報(真 or 偽)しか保存できない。 例えば、『A という条件を満たしていればAという処理を、そうでなければ(B という条件を満たしていれば)Bという処理を行う』場合を考える。Aが実行したい目的であるならば、A が条件分岐の『フラグ』であり、A を満たすことを『フラグを立てる、セットする』と言う。逆に、B を満たすことは『フラグを落とす・倒す』と言う。 フラグは主に条件判定に関わる命令(ビット操作命令・IF文・CASE文)に関係する。 クロック クロック信号、クロックパルスとも言う。 複数の回路を動かすために、ペースメーカーとして使われる信号のこと。メトロノームのようなものだと考えれば良い。 周期的に電圧が高い状態と低い状態をとることで一定の周波数を保つ。アナログ回路では正弦波、デジタル回路では矩形波が用いられる場合が多い。 PICでは、命令の1サイクル(Fetch→Decode→Execute→Write-Back)は4クロックで行われることが多い。 例えば、クロックが1kHz(1秒間に1000回、電圧の昇降が起こる)で、命令の1サイクルが4クロックで行われる場合、1秒間に250個の命令を処理することができる。 つまり、クロックが大きければ大きいほど、命令処理速度は大きくなる。しかし、クロックが大きいということは、1秒間あたりの消費電力が大きいことも同時に意味しており、これは『発熱』という形で回路に悪影響を及ぼす。 クロックは発振器または振動子という装置によって形成される。これらはPICに内蔵されていることもあるが、外部に別の発振器・振動子を取り付けてPICを動作させることも可能である。この状態(発振モード)には6種類ある。 LP 外部水晶振動子外部セラミック振動子 200kHz以下 極低消費電力 XT 外部水晶振動子外部セラミック振動子 200kHz~4MHz 標準的 HS 外部水晶振動子外部セラミック振動子 4MHz~20MHz 高速動作 EXTRC 外部RC発振 約1MHz以上 周波数精度は良くない EXTCLK (高性能)外部発振器 20MHz以下 高性能なものや、低周波を使用する場合 INTOSCINTRC 内部発振 4MHz or 8MHz 外付部品が無い また、PIC16F88では、3種類のそれぞれ異なるクロックから1つを選ぶことができる。 命令のアーキテクチャ 上位ビットには『命令コード』があり、これによって、すべての命令が区別できるようになっている。 下位ビットには『オペランド』があり、これによって、演算対象や定数などの命令実行内容を指定する。 バイト処理命令 主に演算が中心となる命令。fの部分で指定されたf番地レジスタファイルが演算の対象となる。 13 8 7 6 0 命令コード d f f:レジスタファイルのアドレス d:宛先指定 d=0ならWreg、d=1ならレジスタファイルのf番地 ビット処理命令 主にビット演算が中心となる命令。f部分で指定された、f番地レジスタファイルにあるデータのbビット目が演算の対象となる。b部分は3ビット幅あることから、1ビット目~8ビット目のうちいずれか一つを選択することができる。 13 10 9 7 6 0 命令コード b f f:レジスタファイルのアドレス b:レジスタファイルのビット位置 リテラル処理命令 k部分で指定された定数kが演算の対象となる。k部分は8ビット幅あるので、0~255までの数を扱うことができる。 13 8 7 0 命令コード k k:定数データ ジャンプ命令 主にジャンプ命令が中心となる命令。a部分で指定されたアドレスへとジャンプする。aは11ビット幅あるので、直接ジャンプできる範囲は0~2047番地までに限られる。 13 11 10 0 命令コード a a:ジャンプ先のアドレス 演算方法 ここでは2進数、10進数、16進数の扱いについて紹介する。 これらの演算処理は、PICのアセンブラ命令に関与する部分でもある。 なお、パソコンの電卓(プログラマモード)を使えばすぐに演算・変換ができる。 2進数加算 基本的な計算は以下のようになる。 0+0=0 0+1=1 1+0=1 1+1=10(桁上がり) これを使えば、あとは筆算で考えれば良い。 111000 + 101010 ──────── 1100010 2進数減算・符号付2進数 基本的な計算は以下のようになる。 0-0=0 1-0=1 1-1=0 10-1=1 100-1=11 1000-1=111 引き算の場合は、桁借りに注意しなければならない。原理は10進数の引き算と同じだが、初めのうちは理解しにくいかもしれない。 111000 - 101010 ──────── 1110 また、情報処理において、最上位ビットが符号を意味する(0が+、1が-)ことがある。ここから、最上位ビットを符号ビットと呼ぶこともある。つまり、8ビット幅の場合、符号無しだと0(00000000)~255(11111111)を指定することができるが、符号付だと-128(10000000)~127(01111111)を指定する。 なお、この時、値は以下のように変化するので注意が必要である。 00000000(10進数における0) ↓↑ 00001111(10進数における15) ↓↑ 01111111(10進数における127) 10000000(10進数における-128) 10000001(10進数における-127) ↓↑ 10001111(10進数における-113) ↓↑ 11111111(10進数における-1) これらの符号の有無は、演算処理時に設定することができる。 補数 b進法において、自然数aを表現するのに必要な最小の桁数をnとしたとき、 bn - a を「b進法におけるaに対する『bの補数』」 bn - a - 1 を「b進法におけるaに対する『b-1の補数』」 と言う。例えば、10進数では、自然数32の10の補数は64である(32+64=100)。2進数では、10010に対する2の補数は1110である(10010+1110=100000)。 2進数における1の補数は、各桁の0と1とを逆転することで簡単に求められる(NOT演算)。これを利用して、簡単に負の数を表現することが可能になり、また、減算も容易になる。 00111000(10進数における56) →(1の補数へ変換;0と1とを逆転)→ 11000111 →(2の補数へ変換;1の補数に+1する)→ 11001000(10進数における-56) → 1000(または、10進数における8) 00101010(10進数における42) →(1の補数へ変換;0と1とを逆転)→ 11010101 →(2の補数へ変換;1の補数に+1する)→ 11010110(10進数における-42) → 10110(または、10進数における22) 00111000(5610)- 00101010(4210)= 00111000(5610)+ 11010110(-4210) または、 111000(5610)- 101010(4210)=111000(5610)-[1000000(6410)- 10110(2210)] 2進数乗算 基本的な計算は以下のようになる。 0×0=0 0×1=0 1×0=0 1×1=1 1100 × 1111 ─────── 1100 1100 1100 1100 ─────── 10110100 2進数余算 乗算と減算との組み合わせであり、10進数における余算とほぼ同じである。 111 101 )100011 101 ─────── 111 101 ─────── 101 101 ─────── 0 101 101 )11010 101 ─────── 11 0 ─────── 110 101 ─────── 1 ←あまり 2進数・10進数変換 10進数は10nの数の集まりと考えられる。 123 = 2×102 + 2×101 + 6×100 同様にして考えると、2進数も2nの数の集まりと考えられる。この考え方と加算の考え方とを組み合わせることで、2進数と10進数とを相互に変換することができる。 123 = 0×27 + 1×26 + 1×25 + 1×24 + 1×23 + 0×22 + 1×21 + 1×20 ∴ 01111011 1111011= 1×26 + 1×25 + 1×24 + 1×23 + 0×22 + 1×21 + 1×20 =64+32+16+8+0+2+1 =123 10進数・16進数変換 考え方は、2進数←→10進数の変換と同じである。 123 = 0×162+ 7×161 + B×160 ∴ 7B 7B = 7×161 + B(12)×160 = 123 論理演算 ここではPICのアセンブラ命令における論理演算を紹介する。 論理積演算(AND) 両方とも1ならば、結果は1。それ以外なら0。 (例) Wreg 1 0 1 0 1 0 1 0 freg 1 1 0 0 1 1 0 0 結果 1 0 0 0 1 0 0 0 (使用例) ▼0でのマスク ▼0か否かの確認 ▼正か負かの確認 論理和演算(OR) どちらか片方が1ならば、結果は1。それ以外は0。 (例) Wreg 1 0 1 0 1 0 1 0 freg 1 1 0 0 1 1 0 0 結果 1 1 1 0 1 1 1 0 (使用例) ▼1でのマスク ▼0か否かの確認 ▼正か負かの確認 排他的論理和演算(XOR) 両方とも同じ数字ならば、結果は0。異なるのならば1。 (例) Wreg 1 0 1 0 1 0 1 0 freg 1 1 0 0 1 1 0 0 結果 0 1 1 0 0 1 1 0 (使用例) ▼任意ビットの反転 ▼0の代入 ▼データの暗号化 否定演算(NOT) 1の補数へと変換する。2進数の場合、0と1とを逆転することにより、1の補数を求めることができる。 PICのアセンブラでは、COM命令に相当する。 (例) freg 1 1 0 0 1 1 0 0 結果 0 0 1 1 0 0 1 1 記号説明 f、freg レジスタファイルのアドレス W、Wreg ワーキングレジスタ(アキュムレータ) b レジスタ中のビットアドレス a k リテラルデータ、定数データ x 無効、何でも良い d 格納宛先指定d=0ならWへd=1ならレジスタへ label ラベル TOS スタックメモリの最上位の内容 PC プログラムカウンタ(13ビット長) PCLATH プログラムカウンタの上位5ビット GIE グローバル割込許可ビット WDT ウォッチドッグタイマ TO タイムアウトステータスビット PD パワーダウンステータスビット dest 宛先 [ ] オプションで省略化 ( ) 内容 → 割当先 b レジスタの第bビット Z ゼロステータス C キャリーステータス DC 下位4ビットのキャリーステータス 命令一覧 加減算命令 加減算の命令。 演算結果によって、STATUSレジスタのC、DC、Zフラグが変化する。 ADDWF 意味 Add W and f 書式 [label] ADDWF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (Wreg) + (freg) → (dest) 影響フラグ C、DC、Z サイクル 1 機械語 00 0111 dfff ffff 実行内容 Wregの内容にfレジスタの内容を加算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。 SUBWF 意味 Subtract W from f 書式 [label] SUBWF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (freg) - (Wreg) → (dest) 影響フラグ C、DC、Z サイクル 1 機械語 00 0010 dfff ffff 実行内容 fregの内容からWregの内容を減算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。結果が0または正の時、Cフラグが1となる。 ADDLW 意味 Add literal and W 書式 [label] ADDLW k オペランド k:リテラルデータ(0~255) 実行内容 (Wreg) + (k) → (Wreg) 影響フラグ C、DC、Z サイクル 1 機械語 11 111x kkkk kkkk 実行内容 Wregの内容に8ビットのリテラルデータを加算し、その結果をWregに上書きする。 SUBLW 意味 Substract W from literal 書式 [label] SUBLW k オペランド k:リテラルデータ(0~255) 実行内容 (k) - (Wreg) → (Wreg) 影響フラグ C、DC、Z サイクル 1 機械語 11 110x kkkk kkkk 実行内容 8ビットのリテラルデータからWregの内容を減算し、その結果をWregに上書きする。結果が0または正の時、Cフラグが1となる。 論理演算命令 論理演算をする命令。 演算結果によって、STATUSレジスタのZフラグが変化する。 ANDWF 意味 AND W with f 書式 [label] ANDWF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (Wreg).AND.(f) → (dest) 影響フラグ Z サイクル 1 機械語 00 0101 dfff ffff 実行内容 Wregの内容とfregの内容との論理積演算をし、その結果を、d=0ならWregに、d=1ならfregに上書きする。 IORWF 意味 IORWF Inclusive OR With f 書式 [label] IORWF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (Wreg).OR.(f) → (dest) 影響フラグ Z サイクル 1 機械語 00 0100 dfff ffff 実行内容 Wregの内容とfregの内容との論理和演算をし、その結果を、d=1ならWregに、d=1ならfregに上書きする。 XORWF 意味 Exclusive OR W with f 書式 [label] XORWF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (Wreg).XOR.(f) → (dest) 影響フラグ Z サイクル 1 機械語 00 0110 dfff ffff 実行内容 Wregの内容とfregの内容の排他論理和演算をし、その結果を、d=0ならWregに、d=1ならfregに上書きする。 COMF 意味 Complement f 書式 [label] COMW f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 complement(f) → (dest) 影響フラグ Z サイクル 1 機械語 00 1001 dfff ffff 実行内容 fregの内容の補数を演算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。 ANDLW 意味 AND literal with W 書式 [label] ANDLW k オペランド k:リテラルデータ(0~255) 実行内容 (Wreg).AND.(k) → (Wreg) 影響フラグ Z サイクル 1 機械語 11 1001 kkkk kkkk 実行内容 Wregの内容と8ビットのリテラルデータのANDを取り、結果をWregに上書きする。 IORLW 意味 Inclusive OR literal with W 書式 [label] IORLW k オペランド k:リテラルデータ(0~255) 実行内容 (Wreg).OR.(k) → (Wreg) 影響フラグ Z サイクル 1 機械語 11 1000 kkkk kkkk 実行内容 Wregの内容と8ビットのリテラルデータのORを取り、結果をWregに上書きする。 XORLW 意味 Exclusive OR literal with W 書式 [label] XORLW k オペランド k:リテラルデータ(0~255) 実行内容 (Wreg).XOR.(k) → (Wreg) 影響フラグ Z サイクル 1 機械語 11 1010 kkkk kkkk 実行内容 Wregの内容と8ビットのリテラルデータのXORを取り、結果をWregに上書きする。 移動・転送命令 指定したレジスタへデータをコピーする命令。 演算結果によって、STATUSレジスタのZフラグが変化する。 MOVF 意味 Move f 書式 [label] MOVF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (f) → (dest) 影響フラグ Z サイクル 1 機械語 00 1000 dfff ffff 実行内容 fregの内容をdestにコピーする。すなわち、d=0ならWregに、d=1ならfregに上書きする。 MOVWF 意味 Move W to f 書式 [label] MOVWF f オペランド f:レジスタアドレス(0~127) 実行内容 (Wreg) → (dest) 影響フラグ なし サイクル 1 機械語 00 0000 1fff ffff 実行内容 Wregの内容をfregに上書きする。Wregの内容はそのまま。 MOVLW 意味 Move literal to W 書式 [label] MOVLW k オペランド k:リテラルデータ(0~255) 実行内容 (k) → (dest) 影響フラグ なし サイクル 1 機械語 11 00xx kkkk kkkk 実行内容 8ビットのリテラルデータをWregに上書きする。 CLRF 意味 Clear f 書式 [label] CLRF f オペランド f:レジスタアドレス(0~255) 実行内容 0 → (f) 影響フラグ 1 → Z サイクル 1 機械語 00 0001 1fff ffff 実行内容 fregに0を上書きし、Zフラグをセットする。 CLRW 意味 Clear W 書式 [label] CLRW オペランド なし 実行内容 0 → (Wreg) 影響フラグ 1 → Z サイクル 1 機械語 00 0001 0xxx xxxx 実行内容 Wregに0を上書きし、Zフラグをセットする。 カウントアップダウン命令・FOR文 指定したレジスタの値を+1、-1する命令。 DECF 意味 Decrement f 書式 [label] DECF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (f) - 1 → (dest) 影響フラグ Z サイクル 1 機械語 00 0011 dfff ffff 実行内容 fregの内容に1を減算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。 INCF 意味 Increment f 書式 [label] INCF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (f) + 1 → (dest) 影響フラグ Z サイクル 1 機械語 00 1010 dfff ffff 実行内容 fregの内容に1を加算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。 DECFSZ 意味 Decrement f, skip if 0 書式 [label] DECFSZ f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (f) - 1 → (dest):skip if result=0 影響フラグ なし サイクル 12(スキップ時) 機械語 00 1011 dfff ffff 実行内容 fregの内容に1を減算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。また、もし結果がd=0であるなら、次の命令をNOPに変えて実行する。したがってスキップ時は2サイクル命令になる。 INCFSZ 意味 Increment f, skip if 0 書式 INCFSZ オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 (f) + 1 → (dest):skip if result=0 影響フラグ なし サイクル 12(スキップ時) 機械語 00 1111 dfff ffff 実行内容 fregの内容に1を加算し、その結果を、d=0ならWregに、d=1ならfregに上書きする。また、もし結果がd=0であるなら、次の命令をNOPに変えて実行する。したがってスキップ時は2サイクル命令になる。 ビット操作命令・IF文・CASE文 指定レジスタの特定のビットを0や1にする命令。 BCF 意味 Bit Clear f 書式 [label] BCF f,b オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 0 → f b 影響フラグ なし サイクル 1 機械語 01 00bb bfff ffff 実行内容 fレジスタの第bビット目を0にする。フラグの変化は無い。 BSF 意味 Bit Set f 書式 [label] BSF f,b オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 1 → f b 影響フラグ なし サイクル 1 機械語 01 01bb bfff ffff 実行内容 fレジスタの第bビット目を1にする。フラグの変化は無い。 BTFSC 意味 Bit Test f, Skip if Clear 書式 [label] BTFSC f,b オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 skip if (f b )=0 影響フラグ なし サイクル 12(スキップ時) 機械語 01 10bb bfff ffff 実行内容 fregの第bビット目が0だったら、次の命令をNOPに変えて実行する。したがって、スキップ時は2サイクル命令になる。 BTFSS 意味 Bit Test f, Skip if Set 書式 [label] BTFSS f,b オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 skip if (f b )=1 影響フラグ なし サイクル 12(スキップ時) 機械語 01 11bb bfff ffff 実行内容 fregの第bビット目が1だったら、次の命令をNOPに変えて実行する。したがって、スキップ時は2サイクル命令になる。 巡回シフト命令 8ビットのデータをビット単位でシフトする命令。キャリービットも含めてシフトする。 演算結果によって、STATUSレジスタのCフラグが変化する。 RLF 意味 Rotate Left f through Carry 書式 [label] RLF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 0≦n≦6の時 f n → d n+1 n=7の時 f 7 → C C → d 0 影響フラグ C サイクル 1 機械語 00 1101 dfff ffff 実行内容 fregの内容を1ビット、キャリも含めて左に移動する。その結果を、d=0ならWregに、d=1ならfregに上書きする。 RRF 意味 Rotate Right f through Carry 書式 [label] RRF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 0≦n≦6の時 f n → d n-1 n=7の時 f 0 → C C → d 7 影響フラグ C サイクル 1 機械語 00 1100 dfff ffff 実行内容 fregの内容を1ビット、キャリも含めて右に移動する。その結果を、d=0ならWregに、d=1ならfregに上書きする。 SWAPF 意味 Swap nibbles in f 書式 [label] SWAPF f,d オペランド f:レジスタアドレス(0~127)d:格納先(0または1) 実行内容 f 3 0 → f 7 4 f 7 4 → f 3 0 影響フラグ なし サイクル 1 機械語 00 1110 dfff ffff 実行内容 fregの内容の上位と下位4ビットの入替を行い、その結果を、d=0ならWregに、d=1ならfregに上書きする。 ジャンプ命令・サブルーチン プログラムの流れを強制的に変更する命令。 GOTO 意味 Go to address 書式 [label] GOTO a オペランド a:リテラルデータ(0~2047) 実行内容 a → PC 10 0 (PCLATH 4 3 ) → PC 12 11 影響フラグ なし サイクル 2 機械語 10 1aaa aaaa aaaa 実行内容 無条件で指定番地へジャンプする。11ビットのリテラルアドレスをPCレジスタに上書きし、さらにPCの上位にPCLATHの内容を上書きすることでジャンプする。PCLATHにPageを指定しておくことで、全Page範囲にジャンプできる。 CALL 意味 Call subroutine 書式 [label] CALL a オペランド a:リテラルデータ(0~2047) 実行内容 (PC) + 1 → スタックa → PC 10 0 (PCLATH 4 3 ) → PC 12 11 影響フラグ なし サイクル 2 機械語 10 0aaa aaaa aaaa 実行内容 サブルーチンをコールする。まず戻り番地(PC+1)をスタックに格納し、11ビットのリテラルアドレスをPCレジスタに上書きし、さらにPCの上位にPCLATHの内容を上書きすることでジャンプする。PCLATHにPageを指定しておくことで、全Page範囲にジャンプできる。 RETURN 意味 Return from subroutine 書式 [label] RETURN オペランド なし 実行内容 スタック → PC 影響フラグ なし サイクル 2 機械語 00 0000 0000 1000 実行内容 サブルーチンから無条件復帰する。スタックに格納されていた最新の戻り番地をPCレジスタに上書きすることでジャンプする。 RETFIE 意味 Return from interrupt 書式 [label] RETFIE オペランド なし 実行内容 スタック → PC1 → GE 影響フラグ なし サイクル 2 機械語 00 0000 0000 1001 実行内容 割込処理から復帰する。スタックに格納されていた最新の戻り番地をPCレジスタに上書きすることでジャンプし、同時に、グローバル割込ビット(GIE)に1をセットして割込を許可する。 RETLW 意味 Return with literal in W 書式 [label] RETLW k オペランド k:リテラルデータ(0~255) 実行内容 k → Wregスタック → PC 影響フラグ なし サイクル 2 機械語 11 01xx kkkk kkkk 実行内容 サブルーチンから復帰する。その時、Wregにリテラルデータを持って戻る。まず8ビットのリテラルデータをWregにロードし、次にスタックに格納されていた最新の戻り番地をPCレジスタに上書きすることでジャンプする。 その他 特殊な動作命令。主に周辺への制御を行う。 CLRWDT 意味 Clear Watchdog Timer 書式 [label] CLRWDT オペランド なし 実行内容 0 → (WDT prescaler)1 → TO 1 → PD 影響フラグ TO、PD サイクル 1 機械語 00 0000 0110 0100 実行内容 ウォッチドッグタイマをリセットし、さらに連動するプリスケーラもゼロクリアする。ステータスビットのTOとPDを1にセットする。 NOP 意味 No Opreration 書式 [label] NOP オペランド なし 実行内容 なし 影響フラグ なし サイクル 1 機械語 00 0000 0xx0 0000 実行内容 何もせず次へ進む。 SLEEP 意味 Go into standby mode 書式 [label] SLEEP オペランド なし 実行内容 0 → WDT0 → WDT prescaler1 → TO 1 → PD 影響フラグ TO、PO サイクル 1 機械語 00 0000 0110 0011 実行内容 パワーダウンステータスビット(PD)をリセットし、タイムアウトステータスビット(TO)をセットする。さらにウォッチドッグタイマをリセットする。その後、オシレータを停止させてプロセッサをスリープモードにする。これでリセット後の処理と区別することができる。 このページに関するコメント, 意見は以下にどうぞ. 名前 コメント
https://w.atwiki.jp/irogami/pages/134.html
オペラ 色相 レッド 相手に3ダメージデッキからランダムな【ブースト】を持つカード1枚を手札に加える コスト 2 セット 初期 特殊混色 該当なし ブーストをサーチしつつ3ダメージ。 コストパフォーマンス相応の効果ではあるのだが、ブーストで積極的にサーチしたいカードはあまりない。一応ルビーがサーチ対象だが、トマトレッド狙いならアップルグリーンの方が良いだろう。
https://w.atwiki.jp/snesspec/pages/143.html
Absolute Indexed Indirect (絶対アドレス間接インデックス指定) 絶対間接インデックスモードの命令は 3 バイト長の命令で、 オペランドに指定されたアドレスにインデックスレジスタの値を加算することで 実アドレスを得る。 6502 のプログラマは次に示すコードに見覚えがあるだろう。 (訳者注 下のコードは、数字を 1 桁分画面に表示するための サブルーチンのアドレスを引く処理だと思います。) SEC SBC "0" ; アスキーコードのゼロをアキュームレータから引く ASL ; テーブルの値を 2 倍する TAX ; ワードテーブルのオフセットを X レジスタに入れる LDA TABLE,X ; コマンドアドレスの下位バイトを取得 STA PTR ; 間接ポインタの下位バイトを保存する LDA TABLE+1,X ; コマンドアドレスの上位バイトを取得 STA PTR+1 ; 間接ポインタの上位バイトを保存 JMP (PTR) ; コマンドにジャンプ TABLE .WORD RUT1,RUT2,RUT3,... PTR .BYTE 0,0 絶対間接インデックスモードでは、上記のコードのサイズと 消費サイクル数を半分にすることができる。 SEC SBC "0" ; アスキーコードのゼロをアキュームレータから引く ASL ; テーブルの値を 2 倍する TAX ; ワードテーブルのオフセットを X レジスタに入れる JMP (TABLE,X) ; コマンドにジャンプ TABLE .WORD RUT1,RUT2,RUT3,... 間接インデックスモードの JMP 命令 [JMP ($1234,x)] は、 オペランドに指定されたアドレスが、現在指定されているプログラムバンクに 存在するものとして処理する。 また、間接モードの JMP 命令 [JMP ($1234)] は、 オペランドに指定されたアドレスが、 バンク 0 に存在するものとして処理する。 例 JMP ($1234,X)
https://w.atwiki.jp/vsaturn/pages/23.html
int型の変数をdouble型として扱いたい… 前項のdouble型のとき平均値を出すためにdouble型にしました。 しかし、何らかの理由で、int型の変数を使って平均値を出したい場合があったらどうでしょう。 例えば、%演算子は整数同士でしか演算できないためdouble型ではできないのです。しかし平均値はdouble型で小数点以下まで出したいですよね。 そんなとき、計算結果のみをdouble型にするといったことが出来るのがキャストです。 下のプログラムにキャストを使ってみました。 main.cpp /* 平均値を表示する */ #include stdio.h /* メイン関数 */ int main( void ) { int na, nb; puts( "2つの整数を入力してください" ); printf( "整数A:" ); scanf( "%d", na ); printf( "整数B:" ); scanf( "%d", nb ); printf( "2つの数値の剰余は%dです", na % nb ); // 剰余は整数で printf( "平均値は%fです\n", (double)(na + nb) / 2 ); // 平均値は小数点以下まで return(0); } 使い方は簡単です。(型名)のようにカッコに型名を記述したものをキャストさせたい変数の直前に記述します。 キャストの型変換はキャストの記述した部分のみ行われます。 キャスト int a = 5; printf( "%f", (double)a / 3 ); キャストはどうしても変換しなければいけない時だけにしたほうが無難です。 むやみなキャストはエラーの原因になりかねません。 具体的に言うと先ほどのように型が違うと演算できないとき、または暗黙の型変換が行われてしまうときです。 暗黙の型変換とは、両方のオペランドの型が違う時に起こります。 例えば、左オペランドがintで右オペランドがdoubleの演算のときは左オペランドの値がdouble型に格上げされ、 double型同士の演算として行われてしまいます。 このようなときは予め、明示的にキャストしておくことをおすすめします。
https://w.atwiki.jp/snesspec/pages/142.html
Absolute Long Indexed,X (絶対ロングアドレス, Xインデックス) このモードでは、指定された 24bit のアドレスに対して X レジスタの値を加算することで実アドレスを得る。 オペランドが 24bit であること以外は、 6502 の、絶対 X インデックスモードと同じ。 注:オペランドの実際の並び順 (バイナリ表現) は、 下位バイト → 上位バイト → バンクバイト のようになる。 これは、アセンブラによってこのように並び替えられる。 例 LDA $123456,X
https://w.atwiki.jp/snesspec/pages/104.html
REP (Reset Status Bits) [ステータスビットのリセット] オペランドで指定した値で、1 になっているビットを ステータスフラグで 0 にする。 ステータスフラグのビット 5 をクリアする例 REP #%00100000 ; ビット 5 のクリア 複数のビットをクリアする例 REP #%10110000 ; ビット 7, 5, 4 をクリア フラグ変化 nvmxdizc オペランドで指定された値でセットされているフラグはクリアされる。 それ以外のフラグは変化なし。 コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Immediate REP #const C2 2 3
https://w.atwiki.jp/qtmemo/pages/75.html
見出し 見出し QSize クラス 性質 メンバ関数コンストラクタ 幅及び高さを取得する 幅及び高さを設定する 大きさをリサイズする 幅及び高さを制限する 幅と高さを入れ替える 大きさが有効かどうか調べる 加算する 減算する 乗算する 除算する 比較する QSize クラス QSize クラスは整数精度の二次元の大きさを定義します。 公式リファレンス 性質 QDataStream対応 メンバ関数 コンストラクタ +... QSize QSize() 無効な幅及び高さを持つ大きさを生成します。(つまり、isValid() はfalseを返します。) QSize QSize(int width, int height) 指定した幅及び高さを持つ大きさを生成します。 パラメータ width 幅 height 高さ 幅及び高さを取得する +... int QSize width() const 幅を返します。 int QSize height() const 高さを返します。 int QSize rwidth() 幅への参照を返します。 参照を使用することで、幅を直接操作することができます。 int QSize rheight() 高さへの参照を返します。 参照を使用することで、高さを直接操作することができます。 幅及び高さを設定する +... void QSize setWidth(int width) 指定した幅を設定します。 パラメータ width 幅 void QSize setHeight(int height) 指定した高さを設定します。 パラメータ height 高さ 大きさをリサイズする +... void QSize scale(int width, int height, Qt AspectRatioMode mode) 指定したモードに基き、この大きさを指定した幅及び高さを持つ長方形へリサイズします。 パラメータ width 幅 height 高さ mode リサイズ方法 mode が Qt IgnoreAspectRatio の場合はこの大きさは (width, height) に設定されます。 mode が Qt KeepAspectRatio の場合は現在の大きさはアスペクト比を維持しながら (width, height) の内部に収まる最大の長方形へリサイズします。 mode が Qt KeepAspectRatioByExpanding の場合は現在の大きさはアスペクト比を維持しながら (width, height) を囲む最小の長方形へリサイズします。 void QSize scale(const QSize size, Qt AspectRatioMode mode) この関数はオーバーロード関数です。 指定したモードに基き、指定した大きさを持つ長方形へリサイズします。 パラメータ size 大きさ mode リサイズ方法 QSize QSize scaled(int width, int height, Qt AspectRatioMode mode) const 指定したモードに基き、この大きさを指定した幅及び高さを持つ長方形へリサイズした新しい大きさを返します。 パラメータ width 幅 height 高さ mode リサイズ方法 QSize QSize scaled(const QSize s, Qt AspectRatioMode mode) const この関数はオーバーロード関数です。 指定したモードに基き、この大きさを指定した大きさを持つ長方形へリサイズした新しい大きさを返します。 パラメータ s 大きさ mode リサイズ方法 幅及び高さを制限する +... QSize QSize boundedTo(const QSize otherSize) const この大きさと指定した大きさの幅及び高さをそれぞれ比較し、最小の方を持つ大きさを返します。 パラメータ otherSize 比較対象の大きさ QSize QSize expandedTo(const QSize otherSize) const この大きさと指定した大きさの幅及び高さをそれぞれ比較し、最大の方を持つ大きさを返します。 パラメータ otherSize 比較対象の大きさ 幅と高さを入れ替える +... void QSize transpose() 幅と高さの値を入れ替えます。 QSize QSize transposed() const 幅と高さを入れ替えた新しい大きさを返します。 大きさが有効かどうか調べる +... bool QSize isEmpty() const 幅及び高さのどちらか一方が0以下の場合はtrue、そうでない場合はfalseを返します。 bool QSize isNull() const 幅及び高さの両方が0の場合はtrue、そうでない場合はfalseを返します。 bool QSize isValid() const 幅及び高さの両方が0より大きい場合はtrue、そうでない場合はfalseを返します。 加算する +... QSize QSize operator+=(const QSize size) 指定した大きさをこの大きさへ加算し、この大きさへの参照を返します。 パラメータ size 加算する大きさ 非メンバ関数 const QSize operator+(const QSize s1, const QSize s2) s1 に s2 を加算して返します。幅及び高さはそれぞれ加算されます。 パラメータ s1 オペランド s2 オペランド 減算する +... QSize QSize operator-=(const QSize size) 指定した大きさをこの大きさから減算し、この大きさへの参照を返します。 非メンバ関数 const QSize operator-(const QSize s1, const QSize s2) s1 から s2 を減算して返します。幅及び高さはそれぞれ減算されます。 パラメータ s1 オペランド s2 オペランド 乗算する +... QSize QSize operator*=(qreal factor) この関数はオーバーロード関数です。 幅及び高さを指定した要素で乗算し、この大きさへの参照を返します。 結果は最も近い整数へ丸められます。 パラメータ factor 乗数 非メンバ関数 const QSize operator*(const QSize size, qreal factor) 大きさを指定した要素で乗算し、最も近い整数値に丸めた結果を返します。 パラメータ size オペランド factor 乗数 非メンバ関数 const QSize operator*(qreal factor, const QSize size) この関数はオーバーロード関数です。 大きさを指定した要素で乗算し、最も近い整数値に丸めた結果を返します。 パラメータ factor 乗数 size オペランド 除算する +... QSize QSize operator/=(qreal divisor) この関数はオーバーロード関数です。 幅及び高さを指定した要素で除算し、この大きさへの参照を返します。 結果は最も近い整数へ丸められます。 パラメータ divisor 除数 size オペランド 非メンバ関数 const QSize operator/(const QSize size, qreal divisor) この関数はオーバーロード関数です。 指定した大きさで除算し、最も近い整数値に丸めた結果を返します。 パラメータ size オペランド divisor 除数 比較する +... 非メンバ関数 bool operator!=(const QSize s1, const QSize s2) s1 と s2 が異なる場合はtrue、そうでない場合はfalseを返します。 パラメータ s1 大きさ1 s2 大きさ2 非メンバ関数 bool operator==(const QSize s1, const QSize s2) 長方形 s1 と s2 が等しい場合はtrue、そうでない場合はfalseを返します。 パラメータ s1 大きさ1 s2 大きさ2
https://w.atwiki.jp/snesspec/pages/115.html
SEP (Set Status Bits) [ステータスビットのセット] オペランドで指定した値で、1 になっているビットを ステータスフラグで 1 にする。 SEP 命令は、ステータスフラグの m ビットと、 x ビットを セットするための唯一の手段である。 ステータスフラグのビット 5 をセットする例 SEP #%00100000 ; ビット 5 をセット 複数のビットをセットする例 SEP #%10110000 ; ビット 7, 5, 4 をセット フラグ変化 nvmxdizc オペランドで指定された値でセットされているフラグはセットされる。 それ以外のフラグは変化なし。 コード一覧 アドレッシングモード 文法 オペコード バイト数 命令サイクル Immediate SEP #const E2 2 3
https://w.atwiki.jp/109fuku/pages/25.html
エスペランサ 【今!超話題のサボ☆登場!☆★】 ESPERANZAエスペランサ★01キャメルスムース☆ボア付サボ★ヒールUP★【10P15Jan10】 【ローウエッジで履きやすい☆★】 ESPERANZAエスペランサ★2105レッド☆ローウェッジゴム入りパンプス★【10P15Jan10】 【ローウエッジで履きやすい☆★】 ESPERANZAエスペランサ★2105ベージュ☆ローウェッジゴム入りパンプス★【10P15Jan10】 【ローウエッジで履きやすい☆★】 ESPERANZAエスペランサ★2105ブラック☆ローウェッジゴム入りパンプス★【10P15Jan10】 【ローウエッジで履きやすい☆★】 ESPERANZAエスペランサ★2105グレー☆ローウェッジゴム入りパンプス★【10P15Jan10】 【コロンとカワイイ形で人気♪★】 ESPERANZAエスペランサ★810ピンク☆スエット素材ウエッジパンプス★ 【コロンとカワイイ形で人気♪★】 ESPERANZAエスペランサ★810ブラック・グレー☆ボーダーウエッジパンプス★ #blogsearch2
https://w.atwiki.jp/esperanto/pages/23.html
Web版 エスペラントの鍵 (リンク) 概要 エスペラントの初歩を学ぶことができる。 タグ 入門 初級 学習 このサイトは役に立った? 選択肢 投票 役に立った (0)