需要帮助理解这段代码(Z80 汇编器)

Need help understanding this code (Z80 Assembler)

我试着浏览了我的文档,但它真的很混乱,我需要为了考试而理解它,但我遇到了很多麻烦。

  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

大部分'functions'(ld, add, jp, inc) 分别做的事情我都懂,不明白的是:

1) 第一行的IX 加载了什么值? (变量?)vector 有 4 个值,我在 z80 模拟器中试过它,它说 IX 获得值 0019,但我看不出这是从哪里来的...

2) 我是否正确理解 "vector: db 12,7,9,21" 创建了一个值为 12,7,9,21 的数组?

3)"end start"行是做什么的?

4)"amount"持有什么价值?

让我们一次拿这些:

1) What value is loaded into IX in the first line? (the variable?) vector has 4 values on it, I tried this in a z80 simulator and it says that IX gets the value 0019, but I don't see where this is coming from...

ld ix, vector 将向量的内存地址加载到 IX。当您看到 0019 出现在您的模拟器中时,您正在查看从程序开始的字节偏移量。这实际上被用作指向 "array."

中第一个元素的指针

2) Am I understanding correctly that "vector: db 12,7,9,21" creates an array with the values 12,7,9,21?

嗯,你可以这样看。它真正做的就是在 RAM 中定义四个任意字节,并提供一个方便的标签来确定它们的位置。数据的解释方式决定了它是数组、四个字符、两字节整数还是四字节整数等。

3)What does the line "end start" do?

这只是对汇编程序的指令。它实际上对汇编代码没有任何作用。它让汇编程序知道不应该再有任何代码了。

4)What value is "amount" holding?

Amount 是在编译时计算的定义值(而不是分配的内存)。汇编程序中的 $ 通常指的是当前地址。因此,Amount定义为当前地址与vector开始地址的差值。在本例中,由于定义了四个字节,因此计算得出值为 4。