Difference between revisions of "Z80:Answers 2"

From Learn @ Cemetech
Jump to navigationJump to search
m (calend(e|a)r)
m (calend(e|a)r)
Line 17: Line 17:
 
'''DE''' holds the address of a memory location that is a destination.<br />
 
'''DE''' holds the address of a memory location that is a destination.<br />
 
'''HL''' The general 16 bit register, it's used pretty much everywhere you use 16 bit registers. It's most common uses are for 16 bit arithmetic and storing the addresses of stuff (strings, pictures, labels, etc.). Note that HL usually holds the original address while DE holds the destination address.<br />
 
'''HL''' The general 16 bit register, it's used pretty much everywhere you use 16 bit registers. It's most common uses are for 16 bit arithmetic and storing the addresses of stuff (strings, pictures, labels, etc.). Note that HL usually holds the original address while DE holds the destination address.<br />
'''IX''' is called an index register. It's use is similar to HL, but it's use should be limited as it has other purposes, and also runs slower than HL.<br />
+
'''IX''' is called an index register. Its use is similar to HL, but it's use should be limited as it has other purposes, and also runs slower than HL.<br />
 
'''IY''' is another index register. It holds the location of the system flags and is used when you want to change a certain flag. For now, we won't do anything to it.<br />
 
'''IY''' is another index register. It holds the location of the system flags and is used when you want to change a certain flag. For now, we won't do anything to it.<br />
  

Revision as of 05:24, 10 March 2017

1. It tells the compiler to start the program counter at 1.
2. It would automatically start with 0.
3.
8 bit registers
A is also called the "accumulator". It is the primary register for arithmetic operations and accessing memory.
B is commonly used as an 8-bit counter.
C is used when you want to interface with hardware ports.
D is not normally used in its 8-bit form. Instead, it is used in conjuncture with E.
E is again, not used in its 8-bit form.
F is known as the flags. It is the one register you cannot mess with on the byte level. It's uses will be discussed later in the Flags and Bit Level Instructions Section.
H is another register not normally used in 8-bit form.
L is yet another register not normally used in 8-bit form.

16 Bit Registers
AF is not normally used because of the F, which is used to store flags.
BC is used by instructions and code sections that operate on streams of bytes as a byte counter. Is also used as a 16 bit counter.
DE holds the address of a memory location that is a destination.
HL The general 16 bit register, it's used pretty much everywhere you use 16 bit registers. It's most common uses are for 16 bit arithmetic and storing the addresses of stuff (strings, pictures, labels, etc.). Note that HL usually holds the original address while DE holds the destination address.
IX is called an index register. Its use is similar to HL, but it's use should be limited as it has other purposes, and also runs slower than HL.
IY is another index register. It holds the location of the system flags and is used when you want to change a certain flag. For now, we won't do anything to it.

4. Allocation in program

   calendar:
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Saferam areas

   calendar equ AppBackupScrn

5. Instead of containing $00A1, HL instead now contains $A100 because of the little-endian processor. Here's a possible sample code:

   ld HL,(label1)
    ;HL should now contain $00A1
   label:
    .dw $00A1

This is also acceptable:

   ld HL,(label1)
    ;HL should now contain $00A1
   label:
    .db $A1,0