需要帮助理解这段代码(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。
我试着浏览了我的文档,但它真的很混乱,我需要为了考试而理解它,但我遇到了很多麻烦。
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。