• ベストアンサー

65816アセンブラでの質問

現在65816アセンブラを独学で勉強しています。 そこで皆様にお聞きしたいのですが… 例えば AD E0 11 LDA で11E0の値を読み込んで その値が260以上だった場合「Xにジャンプ」、 260以下だった場合「Yにジャンプ」 という命令はどのようにしたら宜しいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • neorg
  • ベストアンサー率54% (235/433)
回答No.2

cmpでAレジスタからメモリのないようをひいて、その差によってキャリーフラグが変化すると思います。 なので、beq(F0)ではなく、bsc(B0)やbcc(90)に変えてやって見て下さい。 詳しい資料がないので間違えているかもしれません。

参考URL:
http://www.oxyron.de/html/opcodes816.html
morscerta
質問者

お礼

ありがとうございます。 参考資料など見て無事出来ました。

その他の回答 (1)

  • neorg
  • ベストアンサー率54% (235/433)
回答No.1

65816は詳しくないのですが、 cmpなどで比較して、キャリーフラグで判断して、 bscやbccでジャンプするればいいと思います。 260だと、8bitを超えてしまうので、65816に16bitの比較演算があるのか、私にはわかりませんが、8bitづつ上位・下位にわけて比較して ジャンプすることもできると思います。 参考になりそうなリンク貼っておきます。 http://www.apple2world.jp/apple2/COL/MapItems/6502/6502.html http://aqube.kir.jp/dsoft/famicom/6502.html

morscerta
質問者

お礼

アドバイスと参考資料ありがとうございました。 全然知識がなかったのでちゃんと勉強してきます。

morscerta
質問者

補足

AD E0 11 LDA $11E0 CD 60 02 CMP $0260 F0 04 BEQ 5C XX XX XX JML $XXXXXX 5C YY YY YY JML $YYYYYY と、してみたのですが これは260だったとき$YYYYYYにロングジャンプするだけで 260以上、260以下での方法が思いつきませんでした。 出来る方法をご教授お願いします。

関連するQ&A

  • アセンブラに関する質問

    アセンブラに関する質問 現在アセンブラの勉強をしている者ですが2つ質問があります (1)以下のサイトの分岐とジャンプ命令の説明にPC+4という記述があるのですがこれはメモリアドレスを指しているのですか?そうだとしたら、4というのはデータ語長が4バイトだとだからという意味だと思うのですがPCというのは何なんでしょうか? R3000 URI:http://ja.wikipedia.org/wiki/R3000#.E5.91.BD.E4.BB.A4.E3.82.BB.E3.83.83.E3.83.88.E3.81.AE.E6.A6.82.E8.A6.81 (2)レジスタr1がレジスタr2の値より小さいとき処理Aと処理Bをさせる方法はどうしたらいいでしょうか?自分が思うに addi r2, r2, 100 ?←ループの始まりを知らせる命令を用意する 処理A 処理B addi r1, r1, 1 ble r1, r2, ?←ループの始まりに行く値をセットする という命令を書けばいいと思うのですが?の部分の書き方が分かりません。 使用できる無条件、条件分岐命令は以下のものが指定されています。 無条件分岐:j, jr, jal 条件分岐:beq, bne, blt, ble

  • 組み込みアセンブラとは何ですか?

    私はx86でアセンブラを勉強中ですが、ネットでアセンブラ関係のことを検索していて組み込みアセンブラという記述をを見ました。 C言語から利用する場合インラインアセンブラより良いとかなんとか。 組み込みアセンブラという名前も怪しく合っているかわかりません。 掲示板のようなところで組み込みアセンブラの方が良い、早いと書いてありました。いろいろ検索して見かけたのでどこの掲示板かもわかりません。後から探したのですが見つけることができませんでした。 そこで質問なのですがそのその組み込みアセンブラとは何なんでしょうか? C言語からアセンブラを利用する場合、今読んでいる本「やさしいアセンブラ入門」にはインラインアセンブラとアセブラ言語モジュール(オブジェクトファイル)をCプログラムでリンクする方法の2種類が書いてありますが。組み込みアセンブラはモジュールで使うということでしょうか? 違うとすればどのような方法でアセンブラを利用することでしょうか? わかる方教えてください。ヨロシクお願いします。

  • アセンブラのCAP-X COMP-X

    アセンブラのCAP-X COMP-X  いつも回答いただきありがとうございます。 アセンブラのCAP-X COMP-Xと言っても、知っている人は、少ないのでは無いでしょうか?  アセンブラのプログラムを組む機会自体が、減少していると思えるのです。  私が、最初に情報処理試験で触れたのは、このアセンブラと仮想のコンピュータでした。いつか、征服したいテーマでした。  でも、今でも、アセンブラと仮想機械では、もっとも、シンプルで、アセンブラの言語と原理を知るには、もっともふさわしいのでは、無いかと考えているのです。  その後も、アセンブラと仮想の機械は、進展しましたが、知らない者には、いよいよ理解しがたく、近づくことが、できないので、この CAP-X COMP-Xを  まず、理解したいと考えているのです。、  アセンブラを理解できる人には、なじみの無いアセンブラと仮想機械と思いますが、現在知っているアセンブラから、類推して回答していただけるとありがたいです。  今は、Windowsの時代になってCAP-X COMP-Xをシュミレーションできるソフトも無くなりました。頭の中で仮想するばかりです。  一語16ビットの計算機であって、0を含めて256の整数倍の番地から始まる連続した256語を1記録ブロックとして、最少1記憶ブロックから最大256記憶ブロックを実装することができる。N個の記憶ブロックを使用するとき、アクセスできるアドレスは、 0番地から(256*N-1)番地までである。  Nが、256の時、 256*256-1=65536 となって65Kのアドレス空間を持つことになる。 ●Q01. このメモリーの中で、コードとテータの両者を使っていると解釈してもよいのだろうか? ●Q02. もし、メモリーのアドレス空間をコードとデータの両者を混合して使用していると誤ってプログラムしてしまうとコードをデータとして読み込んだり、コードのアドレスに誤って、データを書いてしまい、これが、原因で、コンピューターが、暴走したりする危険性は、あるのでしょうか? ●Q03. この仮想の機械には、OSのような領域は、存在しないのでしょうか? ●Q04. 必要ないのでしょうか?  OSが、必要であるのなら、65Kの全ての領域は、使用できなくなると考えることができるのでしょうか? ●Q05. アセンブラの記号を作って、実行するようにしています。しかし、アセンブラを機械語にアセンブルして、メモリーにロードする必要があるように感じますが、この機械では、 アセンブラを機械語に翻訳するソフトは、どのようにして利用されるのでしょうか? ●Q06. 最初にアセンブラ言語を機械語に変換するアセンブリ言語をメモリーにロードしてから、アセンブラを機械語に変換して、メモリーにロードして、アセンブリ言語をクリアして使用するということになるのでしょうか? ●Q07. これなら、機械語とデータ領域の合計として65Kを使えるということになるのでしょうか?  16ビットの命令語のうちアドレスを指定できるのは、 ADフィールドの アドレスの下位8ビットを指定することになります。  これでは、256通りしか表現できません。  上位8ビットは、 BR(基底レジスターbase register)で定められる。  つまり、BRを変更しないと256通りのアドレスを超えてのアドレスを指定できなくなる。  このBRを変更するのに、 JSR命令(jump to subroutine)が使用される。subroutineに飛ぶのと、記憶ブロックを超えるのとどうして、同じ命令で行われるのか分かりません。 ●Q08. どうしてでしょうか?  昔、ユニバック、マシーンというのがありました。  36ビット、1ワードの機械でした。36ビットの中に命令部分とアドレス部分16ビットの両方を納めなければならないので、アドレス空間には、限度がありました。  16ビットだと限度のアドレス空間は、65Kワードということになります。  これ以上に大きな空間は、アクセスできない。  バイトマシーンのように最初の命令語によって、何バイトでも、アキュームレーターに収納できて大きなアドレス空間にアクセスできるようになっていなかったのです。  大きな容量のプログラムを作るとき、65Kワードでは、収納できない。それで、使用したのは、オーバーレイという手法でした。  プログラムをセグメントに切って、必要に応じて順にプログラムをメモリーに載せ替えるという方法です。しかし、セグメントが大きくなるとこれでは、収まることができないので限度がありました。 ●Q09. オーバレイのやり方は、記憶ブロックのやり方と同様と考えて良いのでしょうか?  初期的な質問で申訳ありません。  また、質問が続くようなことがありましてもよろしく教授方お願いします。 ーーーーーーーーーー CAP-X Computer Application X https://ja.wikipedia.org/wiki/CAP-X CAP-X とは、かつて情報処理技術者試験でのプログラミング能力試験のために使用されていたアセンブリ言語である。後継のCASLに置き換えられ、現在はCASL IIが使われている。 COMP-X の仕様[編集] COMP-X はデータワード長が16ビット、メモリアドレス長も16ビットのコンピュータである。アドレスはバイト単位ではなくワード単位に付与される。ワード中のビットの番号付けは、最上位ビットを 0 番、最下位ビットを 15 番とする。バイト単位の処理という概念がないため、エンディアンも規定されていない。また、COMP-X には入出力の概念が規定されておらず、何らかの手段でメモリ上にプログラムとデータを格納し、実行し、その結果はメモリを読み取ることでわかるようになっている。従って、入出力命令は存在しない。扱う数は整数のみで、2の補数表現を採用している。 レジスタは次の通り。 ーーーーーーーー COMP-X Compuer X https://ja.wikipedia.org/wiki/CAP-X CAP-X とは、かつて情報処理技術者試験でのプログラミング能力試験のために使用されていたアセンブリ言語である。後継のCASLに置き換えられ、現在はCASL IIが使われている。 命令語は全て 1 ワードであり、先頭から順に OP フィールド(4ビット)、GR フィールド(2ビット)、XR フィールド(2ビット)、AD フィールド(8ビット)で構成される。OP フィールドは命令の種類を表すコード(オペコード)であり、COMP-X には 12 種類の命令しかない。GR フィールドでは演算で使用する GR の番号が指定される。また、JC命令では分岐条件の指定に使われる。XR フィールドではアドレス修飾を行う GR の番号が指定され、内容が 0 の場合は GR0 を意味するのではなく、GR によるアドレス修飾をしない。AD フィールドはアドレスの下位8ビットを指定する。 実効アドレスとは命令で使用するメモリアドレスであり、上位8ビットは BR で、下位8ビットは AD フィールドで指定される。XR フィールドが 0 以外の場合、指定された GR の下位8ビットと AD フィールドの値を加算し、結果の下位8ビットを実効アドレスの下位8ビットとする。

  • PDP-11のアセンブラ課題

    学校の課題で出されたものです。 まだ勉強をはじめたばかりでどこから手をつけていいのかわかりません>< ○PDP-11のアセンブラは、MOV#1,R2を次のような2語の機械語に翻訳する。PDP-11は、これをど  のように解釈し、どのように実行するのか説明せよ 0001010111000010 0000000000000001 ○PDP-11のMOV命令を使用し、以下の命令のアセンブリ言語表現、機械語表現を示せ。 ・R5が示すアドレスにジャンプする命令 ・サブルーチンから戻る命令 ・R0をスタック上にプッシュする命令 ○次のプログラムをPDP-11のアセンブリ言語で作成せよ。 ・R0が示す番号以降のR2が示すバイト数をR1が示す番号以降に転送 ・R1(上位16ビット)R0(下位16ビット)が示す符号付32ビット値を符号反転 宜しくお願い致します。

  • アセンブラwordという単位

    アセンブラでwordという単位がよく使われるそうですが、wordという単位は他でも聞いたことがあるようなきがしますがよく覚えていません。そこでは1バイト1ワードだったような気もします…。 アセンブラでは一般的に、2バイト1ワードらしいのですが、その根拠がよく分かりませんでした。 もしかしたらマシン語が1命令2バイトで表せるからかなーなどと推測したのですが、どうでしょう。 あと、4バイトの場合dwordと表現するようですが、64ビットCPUが出てきた現在、それ以上の表現もあるのかなーなどと思っています。 質問は以下です。 ・dwordより大きい単位はあるか(あればその内容) ・2バイト1ワードの根拠は何か よろしくお願いします。

  • アセンブラでの即値の引き算

    アセンブラで変数から即値を引く場合(ex. x - 4)は subi rt, rs, 4 とかでできますが、逆に即値から変数を引く場合(ex. 4 - x)はどうなるのでしょうか? neg rs, rs addi rt, rs, 4 みたいに符号を反転してから計算するのでしょうか? もしそうなら、C言語とかでi-4の計算は4-iより遅いということでしょうか? 同様に割り算の場合などはどうなのでしょうか? よろしくおねがいします。

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

    アセンブラ初心者です。「はじめて読む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レジスタにロードする事になるのか分りません。 多分意味している事は簡単な事なのだろうと思うのですが、いろいろ調べても全く手がかりがネットや他の本にもなく苦労しています。 初心者なので出来れば簡単な言葉で教えて戴ければ幸いです。 よろしくお願いいたします。

  • PICアセンブラのニーモニックオペランドで理解不能

    独学中の初心者です。初歩的な質問で恐縮ですが色々調べてもわからず、何日間も頭を悩ませています。どのアセンブラ解説書にも書いてあることですが、例えば、  RLF f,d について、結果を   d=0であれば、wレジスタに   d=1であれば、レジスタfに格納する   デフォルトはd=1 と解説してありますが、実際のプログラムでは  R1 EQU 0x34  RLF R1,F 等とあり、上記'R1,F'の'F'の値がプログラム中で定義されていません。 この'F'の値をどう考えればいのでしょうか。

  • アセンブラについてです。

    シフト命令の乗算、徐算の仕組みが理解できなくてこまってます。 乗算について例をあげます。 8ビット符号なし整数のAL、BLにそれぞれ数値x,yを代入したとします。また、ここでDXはxy(答え)だとします。 次にBLが正ならBLを1bitシフトします。つぎにCF(BLのLSBが入ったキャリーフラグ)が1or0で判断します。0ならそのまま、1ならDX←DX+AXとします。最後ににALを1bit左シフトします。あとはBLが正か負かの処理命令までLOOPします。 確かに実際に値を代入したり、2進数で一つずつ行っても結果は出るのですが、何故BLを右シフトや、ALを左シフト、CFが1or0で区別するのかがわからないです。理解しないままただ作業している状態なので、詳しく説明していただけたら嬉しいです。できることなら、徐算についても同様に説明しただけると嬉しいです。お願いします。

  • 微分の質問です!!

    y=(e^-2x)sin3x が等式 ay+by'+y''=0 を満たすとき、定数a,bの値を求めなさい。 この場合、まずy=(e^-2x)sin3xの式を微分すればいいと思うのですが、どうも混乱してしまい、できません。 y'= (-2e^-2x)sin3x + (e^-2x)3sinxcosx = (e^-2x)sinx(-2+3cosx) y''=(-2e^-2x)sinx+e^-2xcosx(3sinx) このようなやり方であってますか? 一番分からないのは、sinやcosの微分です。 sinxの微分はcosx,cosxの微分はsinxだということまでは分かるのですが、例えば(sin^2)xの微分は2sinxcosxになりますよね? では、sin3xの微分は、3sinxcosxなのでしょうか?それとも3cosxでしょうか?