0

Z80互換プロジェクトを設計しています。私はフラグレジスタを設計しています。

私は当初、フラグは入力と ALU 操作のタイプに応じて ALU から直接生成されると考えていました。

しかし、命令とフラグの結果を見ると、フラグが常にこのロジックと一致しているようには見えません。

その結果、毎回正しいフラグを生成するために、ALUにもオペコードを供給する必要があると想定しています。しかし、これは設計を過度に複雑にするように思われます。そして、この大きな設計ステップを行う前に、インターネットで確認したいと思いました.

私は正しいですか?または、本当に混乱していて、最初に考えたのと同じくらい簡単ですか?

4

2 に答える 2

3

もちろん、操作の種類は重要です。足し算と引き算をするときは、オーバーフローを考慮してください。たとえば、8 ビット バイトを加算または減算するとします。

1+5=6 - オーバーフローなし

255+7=6 - オーバーフロー

1-5=252 - オーバーフロー

200-100=100 - オーバーフローなし

200+100=44 - オーバーフロー

100-56=44 - オーバーフローなし

明らかに、ここでのキャリー フラグの状態は、入力バイトまたは結果のバイト値だけでなく、操作にも依存します。そして、符号なしオーバーフローを示します。

ロジックは非常に一貫しています。そうでない場合は、ドキュメントを読んで公式のロジックを学ぶ時が来ました。

この質問に興味があるかもしれません。

于 2012-07-17T01:12:31.213 に答える
0

あなたのコードは CP/M オペレーティング システム用に書かれています。I/O は、BDOS (ベーシック ディスク オペレーティング システム) インターフェイスを介して行われます。基本的に、オペレーション コードを C レジスタにロードし、追加のパラメータを他のレジスタにロードして、ロケーション 0x5 を呼び出します。機能コード C=2 は、E レジスターの文字をコンソール (=画面) に書き込みます。1200 行目でこれを実際に確認できます。

    ld  e,a
    ld  c,2
    call    bdos
    pop hl
    pop de
    pop bc
    pop af
    ret
 bdos   push    af
    push    bc
    push    de
    push    hl
    call    5
    pop hl
    pop de
    pop bc
    pop af
    ret 

BDOS コールの参照については、こちらを試してください。これをエミュレートするには、アドレス 5 への呼び出しをトラップし、利用可能な機能を使用してそれらを実装する必要があります。

于 2012-10-11T08:50:22.787 に答える