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

4)“金额”持有的价值是多少?

4

1 回答 1

3

让我们一次拿这些:

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

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

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

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

3)“结束开始”行做什么?

这只是对汇编器的一个指令。它实际上对汇编代码没有任何作用。它让汇编器知道不应该有更多的代码出现。

4)“金额”持有的价值是多少?

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

于 2015-06-11T22:17:05.440 回答