0

私の質問

以下のコードをビルドすると、「319920C30020C30A20FBED563E00C600CA0520F33E55D3073E00FBC9」が表示されます

私の問題は、コードの各ブロックがプログラムメモリ内の要求されたアドレス0000H、0038H、および2000Hにあるように、これがゼロで埋められると仮定したことです。

手動でパディングを行う回避策がすぐにわかりますが、Z80 プロセッサに上記のプログラムをロードして、正しいアドレスに配置するにはどうすればよいでしょうか?

コード

STACK .EQU 2099H
.ORG 0000H
    ld  SP, STACK
    jp 2000H

.ORG 0038H
    jp  service_routine

.ORG 2000H
    EI
    IM 1 
    LD  A, 00H

LOOP:
    ADD A, 00H
    jp  z, LOOP

service_routine:
    DI
    ld  A, 55H
    out (07H),A
    ld  A, 00H
    EI
    ret
4

2 に答える 2

1

このORGディレクティブは、コード内のその時点で PC が何であるかをアセンブラーに伝えるだけです。アセンブラはこれを使用して、相対ジャンプの正しいコードを計算できます。アセンブラーまたはローダーに、そのアドレスにコードを実際にロードするように指示するわけではありません。

于 2012-08-15T23:30:10.543 に答える
0

ディスク イメージを実行中のプログラムに変換するプロセスは、非常に複雑になる場合があります。昔は、1k ゼロのブロックはディスク スペースの深刻な浪費と見なされていましたが、今日では別のスケールで同じことが当てはまります。1K ゼロを冷笑するかもしれませんが、ファイル内の 1G ゼロが廃棄物。

マシンのアーキテクチャによっては、コードやデータのブロックを再配置するだけでなく、それ以上のプロセスが必要になる場合があります。たとえば、外部モジュールの正しいアドレスを参照するために、コード内のジャンプ アドレスにパッチを適用する必要がある場合があります。

于 2012-08-15T23:35:47.203 に答える