需要帮助理解此代码(Z80汇编程序)

时间:2015-06-10 19:54:42

标签: assembly z80

我尝试浏览我的文档,但这确实很令人困惑,我需要了解这一点,但是我遇到了很多麻烦。

  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)“结束开始”行是做什么的?

4)“金额”持有什么价值?

1 个答案:

答案 0 :(得分:3)

让我们一次采取这一个:

  

1)第一行中IX加载了什么值? (变量?)向量上有4个值,我在z80模拟器中尝试了这个,它说IX得到的值是0019,但我不知道它来自哪里......

ld ix, vector行将vector的内存地址加载到IX。当您在模拟器中看到0019显示时,您正在查看程序开头的字节偏移量。这基本上被用作指向该"数组中第一个元素的指针。"

  

2)我是否正确理解"向量:db 12,7,9,21"创建一个值为12,7,9,21?

的数组

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

  

3)该行"结束了什么"办?

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

  

4)什么价值"金额"保持?

Amount是在编译时计算的定义值(而不是分配的内存)。汇编程序中的$通常是指当前地址。因此,Amount被定义为当前地址与vector开始的地址之间的差异。在这种情况下,由于定义了四个字节,因此该值将为4。