1,885
edits
Changes
Created page with "Category:6502 The 6502 processor has 13 Addressing Modes. Not all addressing modes are valid for every instruction. == Accumulator == The operation works on the..."
[[Category:6502]]
The [[6502]] processor has 13 [[Addressing Modes]]. Not all addressing modes are valid for every instruction.
== Accumulator ==
The operation works on the accumulator. No additional data is required. Examples:
ASL A
LSR A
ROL A
ROR A
Note that the explicit <code>A</code> is not required by most assemblers, so you could write:
ASL
LSR
ROL
ROR
== Absolute ==
Data is accessed using 16-bit address specified as a constant.
LDA $06d3
STX $0200
== Absolute, X ==
Data is accessed using a 16-bit address specified as a constant, to which the value of the X register is added (with carry).
LDA $8000,x
STA $8000,x
== Absolute, Y ==
Data is accessed using a 16-bit address specified as a constant, to which the value of the X register is added (with carry).
LDA $8000,y
STA $8000,y
== Immediate ==
Data is taken from the byte following the opcode.
LDA #$05
ORA #$80
== Implied ==
The data is implied by the operation. Examples:
CLC
RTS
== Indirect ==
Data is accessed using a pointer. The 16-bit address of the pointer is given in the two bytes following the opcode.
JMP ($9000) ; Jumps to the location pointed to by addresses $9000 (low) and $9001 (high)
== X, Indirect ==
An 8-bit zero-page address and the X register are added, without carry (if the addition overflows, the address wraps around within page 0). The resulting address is used as a pointer to the data being accessed. Note that, effectively, this makes the X register an index into a list of pointers.
LDA ($05,x)
== Indirect, Y ==
An 8-bit address identifies a pointer. The value of the Y register is added to the address contained in the pointer. Effectively, the pointer is the base address and the Y register is an index past that base address.
LDA ($10),y
== Relative ==
An 8-bit signed offset is provided. This value is added to the program counter (PC) to find the effective address.
BNE $0600 ; The value "$0600" is assembled into a signed offset. If the target must be in the range of (-128:127) bytes of the current PC value.
== Zero page ==
An 8-bit address is provided within the zero page.
LDX $13
AND $07
== Zero page, X ==
An 8-bit address is provided, to which the X register is added (without carry - if the addition overflows, the address wraps around within the zero page).
STA $00,x
LDA $00,x
== Zero page, Y ==
An 8-bit address is provided, to which the Y register is added (without carry - if the addition overflows, the address wraps around within the zero page).
STA $00,y
LDA $00,y
The [[6502]] processor has 13 [[Addressing Modes]]. Not all addressing modes are valid for every instruction.
== Accumulator ==
The operation works on the accumulator. No additional data is required. Examples:
ASL A
LSR A
ROL A
ROR A
Note that the explicit <code>A</code> is not required by most assemblers, so you could write:
ASL
LSR
ROL
ROR
== Absolute ==
Data is accessed using 16-bit address specified as a constant.
LDA $06d3
STX $0200
== Absolute, X ==
Data is accessed using a 16-bit address specified as a constant, to which the value of the X register is added (with carry).
LDA $8000,x
STA $8000,x
== Absolute, Y ==
Data is accessed using a 16-bit address specified as a constant, to which the value of the X register is added (with carry).
LDA $8000,y
STA $8000,y
== Immediate ==
Data is taken from the byte following the opcode.
LDA #$05
ORA #$80
== Implied ==
The data is implied by the operation. Examples:
CLC
RTS
== Indirect ==
Data is accessed using a pointer. The 16-bit address of the pointer is given in the two bytes following the opcode.
JMP ($9000) ; Jumps to the location pointed to by addresses $9000 (low) and $9001 (high)
== X, Indirect ==
An 8-bit zero-page address and the X register are added, without carry (if the addition overflows, the address wraps around within page 0). The resulting address is used as a pointer to the data being accessed. Note that, effectively, this makes the X register an index into a list of pointers.
LDA ($05,x)
== Indirect, Y ==
An 8-bit address identifies a pointer. The value of the Y register is added to the address contained in the pointer. Effectively, the pointer is the base address and the Y register is an index past that base address.
LDA ($10),y
== Relative ==
An 8-bit signed offset is provided. This value is added to the program counter (PC) to find the effective address.
BNE $0600 ; The value "$0600" is assembled into a signed offset. If the target must be in the range of (-128:127) bytes of the current PC value.
== Zero page ==
An 8-bit address is provided within the zero page.
LDX $13
AND $07
== Zero page, X ==
An 8-bit address is provided, to which the X register is added (without carry - if the addition overflows, the address wraps around within the zero page).
STA $00,x
LDA $00,x
== Zero page, Y ==
An 8-bit address is provided, to which the Y register is added (without carry - if the addition overflows, the address wraps around within the zero page).
STA $00,y
LDA $00,y