• 締切済み

アセンブラ skipzの意味

お世話になります PIC系のアセンブラでskipzはオペランドが0の場合に次の行をスキップする命令でよろしいのでしょうか? btfscのbyte判定版みたいな使い方なのでしょうか? ご存知の方がいましたら教えていただけないでしょうか

みんなの回答

  • ballville
  • ベストアンサー率47% (233/487)
回答No.4

picについて、分かりやすく解説しているサイトを見付けました。 条件付きskip命令についてはここを見て下さい。 http://www.ccad.sccs.chukyo-u.ac.jp/~mito/syllabi/MediaSystem/Instruction/index.htm 結構情報料が多いので読みでがあると思いますが。

参考URL:
http://www.ccad.sccs.chukyo-u.ac.jp/~mito/syllabi/MediaSystem/
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

Zフラグが1のときにPカウンタを+2するつまり1命令スキップする命令のようです。 従ってオペランド不要です。

usami33
質問者

補足

評価ボードにサンプルでついてきたコードに記載されているので、果たして他のアセンブラと同じように、オペランドを除いてしまってよいのでしょうか?

  • zak33697
  • ベストアンサー率27% (275/1016)
回答No.2

zak >アセンブラでskipzはオペランドが0の場合に次の行を >スキップする命令? 例 1 DEC100 2 SKIPZ 3 GOTO 10 4 xxx [100]番地-1 IF=0 JMP to xxx 今アセンブラ知っている人 中々いないので少し思い出したので回答します。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

picについてはよく知りませんが、アセンブラの常識でいえば、「オペランドが0のとき」ではなくて、「ゼロフラグが立っているとき」ではないでしょうか。 たぶん、オペランドは取らないで、skipz命令の直前に加減算命令やテスト命令を実行して、フラグを変化させるのだと思います。

usami33
質問者

補足

#1さま、#2さま回答ありがとうございます アセンブラは種類が多すぎですね 今回のはPIC系のアセンブラのサンプルの一部で、CCSのコンパイラも正常にとおるのですが、PIC系の文献に無い使い方なので、いまいち理解に苦しんでいます 抜粋 movrf AAA_Status,W xorlw BBB_Status skipz W goto CCC このようにskipzにオペランドが存在しているんです、 想像では皆様の回答のように0ならスキップだと思うのですが、なにせプログラムは一命令間違えるだけで正常に動作しないので、確証がもてません

関連するQ&A

  • アセンブラで「0でないならスキップ」したい

    アセンブラで「0でないならスキップ」したい PIC18Fベースの開発で、アセンブラでプログラムをしています。 いま、遅延タイマーとして作った変数DELAY(初期値:0x0f)をタイマ割込みで減算しています。 DELAYが0x00になったとき、実行したい命令がありますが、どのようにプログラムすれば簡潔に記述できるでしょうか。 命令一覧表を眺めながら考えているのですが、できそうでできず困っています。

  • PICのアセンブラ命令コード一覧

    PIC24FまたはdsPICのアセンブラ命令コード一覧を探しているのですが、 マイクロチップのHPからも探し方が悪いのか、当方は見つけることができませんでした。 何方か、PIC24FまたはdsPICのアセンブラ命令コード一覧が記載されているHPや情報をご存知ないでしょうか? アセンブラ記述で、コーディングしたいのですが、命令コードの意味が良く分かりません。 命令コードとその意味が記載されたものがほしいのです。 宜しくお願いします。

  • アセンブラのLA

    毎度、お世話になっています。 現在、汎用機のアセンブラの仕事をやっておりますが、 下記の意味(必要性)がわかりません。 ご存知の方、意味を教えてください。 LA R3,0(,R3)  ※R3は、R3以外でも構いませんが、第2オペランドと   第1オペランドのレジスターは同じです。 なお、下記の計算がR3+1(R3を示すアドレス+1)で あることは知っています。 LA R3,1(,R3)

  • PICアセンブラ、これって変?

    PIC16F84でのアセンブラなのですが、下記のプログラムで・・・。 MAIN     MOVLW B'00000000'     MOVWF PORTB     BTFSC PORTA,3     GOTO  FINISH     GOTO  MAIN FINISH     MOVLW B'11111111'     MOVWF PORTB     END PortAが入力、Bが出力なのですが、MAINでループしながら待機、 PortAの3bitめがHになったらPortBをすべて立てて終了という感じに なると思いますが、上手くいかないんです。 3bit目にあらかじめ+5Vを印加しておくと、一瞬でPortBがすべて立つのですが、 ループ中にやっても何も変化がありません。 ループしていないか、判定ができていないかのどちらかなのですが・・・。 デバッグしてみても、きちんとループ・判定できているのですが いざ焼いてみると動作しません。わかりますでしょうか。

  • PICの誤動作についての質問です

    現在PIC18F24K20というPICを使用していて、2つの入力信号に対して、1ビットずつ判定を行いその2つの信号が間違っていればPORTBを+1してカウントしていくというプログラムを作っています。 RC0、RC2から信号を入力しています。Receive0でまずタイミングを合わせて、Receiveで間違っているかの判定を行うというプログラムです。 Receive0 BTFSS PORTC,0 ;RC0がHighなら次の命令をスキップ GOTO Receive0 NOP NOP NOP NOP NOP ;*** 入力信号の解析 Receive BTFSS PORTC,0 ;RC0がHighなら次の命令をスキップ GOTO ZERO BTFSS PORTC,2 ;RC2がHighなら次の命令をスキップ INCF PORTB,F ;PORTBを+1 NOP GOTO Receive ZERO BTFSC PORTC,2 ;RC2がLowなら次の命令をスキップ INCF PORTB,F ;PORTBを+1 NOP GOTO Receive (PORTの設定は省かせてもらっています) プログラムにおかしい点があれば指摘していただければうれしいです。 回路は入力をFPGAから直接RC0、RC2に入力して、PORTBも開放してロジアナで波形を観測しています。 ロジアナで見ると思っているような動作ではなく、PORTBが勝手にHighやLowになってしまっています。どのようなことが問題になっているのでしょうか?

  • このアセンブラの意味を教えて下さい

    アセンブラ初心者です。「はじめて読む486」を読んで勉強しているのですが、いくら調べても分らないのでどうぞ教えて下さい。次の2つのプログラムが分りません。 ------------------------------------------ db 0eah dw offset set_cs_desc2 dw 20h set_cs_desc2: 以下プログラムが続く --------------------------------- セグメント間ジャンプ命令によってCSレジスタに0020hをロードすると本にあるのですが、先ずdb、dwとは何を意味するのでしょうか。単にバイト、ワードを指定しているのでしょうか?そうだとしたらなぜdb、dwと指定しているのか分りません。 また0eah,20hが何を意味しているのか分りません。 出来れば1行ごとに詳しく教えて戴ければ嬉しいです。 また ------------------------------ db 0eah dw offset set_cs_desc3 dw seg set_cs_desc3 set_cs_desc3: move命令などが続く _text ends end ------------------------------------ セグメント間ジャンプ命令によってCSレジスタに_textをロードすると本にはあるのですが、上のプログラムと同様、0eah,db,dwが分りません。 またsegは何を意味するのか分りません。お手数だとは思いますが、これも1行ごとに詳しく解説していただけないでしょうか? そして2つのプログラム共通に分らないのが、なぜこのコードでCSレジスタにロードする事になるのか分りません。 多分意味している事は簡単な事なのだろうと思うのですが、いろいろ調べても全く手がかりがネットや他の本にもなく苦労しています。 初心者なので出来れば簡単な言葉で教えて戴ければ幸いです。 よろしくお願いいたします。

  • BTFSC 分岐命令の不思議

    PIC アセンブラを勉強し始めたばかりの者です。今あるモノを PIC16F886 で作っています。 PORTB 変化割り込み機能を使い、スイッチ RB7 が H→L で割り込みが掛かるようにしました。 そのルーチンの中で、スイッチフラグ変数 F_SW を MOVLW 1 XORWF F_SW,F のように押されるたびに反転します。 次に BTFSC F_SW,0 BSF PORTC,3 BCF PORTC,3 のようにしてフラグの状態によって RC3 を H にしたり L にしたいんですが、これが上手く動作しないのです。 試しにシミュレーションで 1 ステップづつ確かめてみると、F_SW = 1 だと BTFSC の次の行、0 だと 1 つ先にジャンプします。 ここまでは良いのです。 ところが、F_SW = 1 の場合、 BSF PORTC,3 に行って RC3 が H になったあと、次のステップでなぜか L に戻るのです。 これを発見するまで 3 日ほど悩みました。 ふと思い、以下のようにすると思い通りの動作をしてくれるようになりました。 BTFSC F_SW,0 GOTO HANDAN_ON GOTO HANDAN_OFF HANDAN_ON BSF PORTC,3 ; 制御 ON GOTO INTR_END HANDAN_OFF BCF PORTC,3 ; 制御 OFF ; 割り込み終了 INTR_END なぜなんでしょう?

  • MPLAB IDE v8.92アセンブラについて

    PICマイコンを初めて使う初心者です。 準備としてPickit3を購入し、最新バージョンの”MPLAB IDE v8.92”を開発環境に入手しましたが、 初期設定の”Project Wizard”でアセンブラのコンパイラーの選択が上手くいきません。 ”mpasmwin.exe”などのコンパイラーが入手できたら可能なのか、そもそもアセンブラでは開発は出来ないものなのでしょうか? また、コンパイラーの実行ファイルの入手ができたとしてリンクさせる方法などご存知の方がおられましたら、ご教示お願い致します。 マイクロチップへ問い合わせをしているのですがなかなか回答がきません。 よろしくお願い致します。

  • ニーモニックから機械語へ変換する簡易アセンブラ

    ニーモニックから機械語へ変換する簡易アセンブラ 初期のアセンブラにおいて、ニーモニックから機械語への変換はどのようなアルゴリズムで行われていたか知りたいのですが、H8マイコンなどで実際にコードを書いたウェブサイトなどはありますでしょうか? またイメージとしては、メモリに格納された文字コードを1バイトずつ命令変換テーブルと比較し、同じ場合はそのオペコードを出力するといったようなアルゴリズムになると思うのですが、これは正しいでしょうか? 例えば具体的に「MOV A B(BレジスタからAレジスタへの転送命令)」を機械語へ変換する処理を考えると、下記のようになると思います。 [命令変換テーブル] OPコード(1バイト) 文字列長(1バイト) 文字コード : 文字コード を命令数分用意する。 (1)ニーモニックの左端から1文字(1バイト)ずつ、まず命令変換テーブルの最初の命令の文字コードと比較が行われる (2)空白まで全ての文字コードが一致すれば、一致した命令変換テーブルのOPコードを得る (3)一致しない場合は、命令テーブルの次の命令の文字コードと比較していく((1)にループする) (4)命令テーブルの最後まで一致するものがなければエラー 高級言語ではこのような処理はブラックボックスになっていると思いますが、アセンブラレベルでどのように実現されているか解説が見当たらなかっため質問させて頂きました。どうぞよろしくお願い致します。

  • 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?

    最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m

専門家に質問してみよう