1

持っているドキュメントを調べてみましたが、本当にわかりにくいです。試験のためにこれを理解する必要がありますが、多くの問題があります。

  aseg
  org  100h
start:  ld    ix, vector 
        ld    B, amount
        ld    A, 0
cycle:  add   A, (IX)
        jp    PE, fail
        inc   IX
        djnz  cycle
        ld    (resp), A
        jp    fin
fail:   ld    A, 1
        ld    (error), A
fin:    rst   38h
vector: db    12,7,9,21
amount  equ   $ - vector
resp    ds    1
error:  db    0
        end   start

ほとんどの「関数」(ld、add、jp、inc)が個別に何をするかは理解していますが、理解できないのは次のとおりです。

1) 最初の行で IX にロードされる値は? (変数?) ベクトルには 4 つの値があります。これを z80 シミュレーターで試してみたところ、IX が値 0019 を取得すると表示されましたが、これがどこから来ているのかわかりません...

2) "vector: db 12,7,9,21" が値 12,7,9,21 の配列を作成することを正しく理解していますか?

3)「end start」という行は何をしますか?

4)保有している「金額」とは何の価値ですか?

4

1 に答える 1

3

これらを 1 つずつ取り上げてみましょう。

1) 最初の行で IX にロードされる値は? (変数?) ベクトルには 4 つの値があります。これを z80 シミュレーターで試してみたところ、IX が値 0019 を取得すると表示されましたが、これがどこから来ているのかわかりません...

この行ld ix, vectorは、ベクトルのメモリ アドレスを にロードしますIX。シミュレーターで show up here が表示される場合0019、プログラムの先頭からのバイト オフセットを見ています。これは基本的に、その「配列」の最初の要素へのポインタとして使用されています。

2) "vector: db 12,7,9,21" が値 12,7,9,21 の配列を作成することを正しく理解していますか?

まあ、そのように見ることができます。実際に行っていることは、RAM に任意の 4 バイトを定義し、それらがどこにあるかを把握するための便利なラベルを提供することだけです。データがどのように解釈されるかによって、それが配列であるか、4 文字であるか、2 バイトの整数であるか、4 バイトの整数であるかなどが決まります。

3)「end start」という行は何をしますか?

これは、アセンブラへの単なる指示です。アセンブルされたコードに関しては、実際には何もしません。これにより、アセンブラは、これ以上コードが来る必要がないことを認識できます。

4)保有している「金額」とは何の価値ですか?

量は、コンパイル時に計算される (割り当てられたメモリではなく) 定義された値です。アセンブラの$は通常、現在のアドレスを参照します。したがって、Amount現在のアドレスと開始アドレスの差として定義されvectorます。この場合、4 バイトが定義されているため、これは 4 の値になります。

于 2015-06-11T22:17:05.440 に答える