我尝试浏览我的文档,但这确实很令人困惑,我需要了解这一点,但是我遇到了很多麻烦。
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)“金额”持有什么价值?
答案 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。