問題タブ [z80]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - アセンブラーの間違ったコード
Z80 アセンブラ コードで問題が発生しました。コードは次のとおりです。
コードは最初の n 個の整数を合計し、n は tops のメモリ ゾーンから取得することになっています。助けてくれてありがとう
assembly - GameBoy ISA (エミュレーターの作成)
私は C でゲームボーイ エミュレーターに取り組んでいます。
http://realboyemulator.files.wordpress.com/2013/01/gbcpuman.pdf
上記の PDF の 66 ページを参照し、Opcode 0x7E -- LD,R1,R2 に対応する命令を見ると、この命令について興味があります..
GB には、A、B、C、D、E、F、H、L の 8 つの 8 ビットレジスタがあります。AF、BC、DE、HL の 2 つを連結して 16 ビットのレジスタを作成できます。
16 ビット値 (HL) を 8 ビット レジスタ (A) に格納しようとしているように見えるため、Opcode 0x7E について混乱しています。
LD、A、(HL)
このドキュメントを誤解していますか? このような命令が存在する理由を誰かが説明できますか? LD、A、L に置き換えることはできませんか?
cpu-registers - Z80 ステータス フラグ レジスタ
これは非常に単純な質問のように思えるかもしれませんが、次のレジスタ スキーマを見ると、次のようになります。
「一般的な」フラグレジスタがフラグビットの8ビット表現であることを考えると、私は疑問に思っています:
「代替」F'レジスタは常にまったく同じフラグビットを指していますか、それとも何らかの方法で異なるバイトを含むことができますか(代替レジスタには直接アクセスできず、スワップインのみが可能です)。
言い換えると、「一般」レジスタ F のバイト内容は常に「代替」レジスタ F と同じですか (同じ一意のフラグ ビットを表します - 「代替レジスタのスワップ」命令がフラグ ビットを変更しないと仮定します) ?
cpu-registers - Z80 レジスタのエンディアン
このサンプルコードを考慮してください:
これは次のことを行っています:
- レジスタ H に 229 (10 進数) をロードします。
- レジスタ L に 90 (10 進数) をロードします。
- H、L、および HL レジスタの値 (16 進数、バイナリ MSB、10 進数) を出力します。
- レジスタ HL に 23268 (10 進数) をロードします。
- H、L、HL レジスタの値を再度出力します。
出力例:
質問は次のとおりです。
- レジスタがどのように機能するかについての上記の仮定 (およびサンプル出力) は正しいですか?
- 他のレジスタ ペア (AF、BC、DE) はまったく同じように機能しますか?
- 1. と 2. の答えが「はい」の場合、Z80 がリトル エンディアンと見なされるのはなぜですか? HL レジスタの内容がメモリに書き込まれると、L バイトが最初に実行されますが、(後でそれらを順次読み取ると、バイトは確実にビッグ エンディアン順になります)?
hex - z80 アセンブラーで 8 ビットの数値を 16 進数に変換する
z80 を使用して ZX Spectrum 用のゲームを書いていますが、少し問題があります。「a」レジスタに保持されている数値を「de」に保持されている 16 進数値に変換するルーチンを操作しました。他の方法で変換する方法がわかりません。EG は de で 16 進数値を渡し、これを "a" で保持される 10 進数に変換します。
注意: 次のルーチンは、入力を 0 から F までの値を表す ASCII 値に変換します。例えば、a = 255 の場合、d = 70 および e = 70 の場合、「F」は ASCII 値 70 です。
これを逆に実行するための解決策についてアドバイスしたり、より良い解決策を提供したりできますか?
z80 - PutS が TI-84 Plus Silver エディションで 1 文字しか表示しない
最近、私の TI-84 plus シルバー エディションが 16 進数でプログラムできることを発見しました。私はそれをいじっていましたが、いくつかのバグがありました。PutS に bcall を実行しようとすると、1 文字だけが出力されて先に進みます。2 番目の PutS コマンドを追加すると、2 番目の文字が 1 つ下と右に配置されます。私の現在のコードは次のとおりです。
emulation - ゲームボーイ: 何も変更しない命令 (AND A など) の目的は何ですか?
私はゲームボーイエミュレーターに取り組んできLD A, A
ましLD B, B
たAND A
. 最初のものは、レジスタの値を同じレジスタにロードするため、明らかに何も変更しません。 はレジスタAND
と比較されているため、常に が返されます。これらの操作には何らかの目的がありますか、それとも各サイクルの後と本質的に同じですか?A
AND A
A
NOP
assembly - アセンブリのラベルはどのようにしてランタイムアドレスを知ることができますか?
私はアセンブリ (z80 および x86) を学習しており、現在、アセンブラを使用してバイナリをビルドすることに取り組んでいます。
(相対ではなく) 絶対アドレスでラベルを使用するにはどうすればよいですか?
私が理解していることから、アセンブラはコンパイル時にラベルをメモリアドレスに変換しますが、アセンブラは実行時にラベルが存在するアドレスをどのように知ることができますか?
プログラムを特定のメモリ アドレスにロードしRST
、プログラム カウンタを0000h
. オペレーティング システムが実行されているとどうなりますか?
call
オペレーティング システム内で実行されるコードは、その開始アドレスを知らないのではないでしょうか (したがって、 やret
ラベルのような非相対オペコードを使用する方法がありません)。