I tried going through the documentation I have but it's really confusing, I need to understand this for an exam but I'm having lots of troubles.
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
I understand what most of the 'functions' (ld, add, jp, inc) do separately, what I don't understand is:
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...
2) Am I understanding correctly that "vector: db 12,7,9,21" creates an array with the values 12,7,9,21?
3)What does the line "end start" do?
4)What value is "amount" holding?
Let's take these one at a time:
The line
ld ix, vector
loads the memory address for vector intoIX
. When you see0019
show up here in your simulator you are looking at the byte offset from the start of the program. This is essentially being used as a pointer to the first element in that "array."Well, you could view it that way. All that it's really doing is defining four arbitrary bytes in RAM and providing a convenient label to figure out where they are. How the data is interpreted is what determines if it's an array, four characters, a two byte integer or a four byte integer, etc.
This is just a directive to the assembler. It actually does nothing with regard to the assembled code. It lets the assembler know that there should not be any more code coming.
Amount is a defined value (rather than allocated memory) that is calculated at compile time. The
$
in an assembler typically refers to the current address. Therefore,Amount
is defined as the difference between the current address and the address wherevector
starts. In this case, since there are four bytes defined, this will work out to a value of 4.