We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

PER: Difference between revisions

From SnesLab
Jump to: navigation, search
(added Labiak page)
(push category)
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''PER''' (Push pc RElative indirect Address) is a [[65c816]] instruction that pushes a 16-bit value to the stack.
{| class="wikitable" style="float:right;clear:right;width:40%"
 
{| class="wikitable" style="float:right;clear:right;width:30%"
!colspan="8"|Basic Info
!colspan="8"|Basic Info
|+
|+
Line 9: Line 7:
|'''Speed'''
|'''Speed'''
|+
|+
|stack
|[[Stack Addressing|Stack]] (PC Relative Long)
|62
|62
|3 bytes
|3 bytes
Line 16: Line 14:


{| class="wikitable" style="float:right;clear:right;width:30%"
{| class="wikitable" style="float:right;clear:right;width:30%"
!colspan="9"|Flags Clobbered
!colspan="9"|Flags Affected
|+
|+
|N
|[[Negative Flag|N]]
|V
|[[Overflow Flag|V]]
|M
|[[M Flag|M]]
|X
|[[X Flag|X]]
|D
|[[Decimal Flag|D]]
|I
|[[I Flag|I]]
|Z
|[[Zero Flag|Z]]
|C
|[[Carry Flag|C]]
|+
|+
|.
|.
Line 36: Line 34:
|.
|.
|}
|}
'''PER''' (Push pc RElative indirect Address) is a [[65c816]] instruction that pushes a 16-bit sum to the [[stack]].  The addends are:
* the [[program counter]] after it has been incremented to point to the instruction following PER, and
* the 16-bit displacement following the PER opcode.
The high byte of the sum is pushed before the low byte.
No flags are affected.  Neither the [[program bank register]] or [[program counter]] are modified either.
==== Syntax ====
<pre>
PER label
PER #label
</pre>
Assemblers that accept PER with the # syntax are rare.
PER works even in [[emulation mode]].


=== See Also ===
=== See Also ===
* [[PEA]]
* [[PEA]]
* [[PEI]]
* [[PEI]]
* [[return address]]


=== External Links ===
=== External Links ===
* [[Eyes & Lichty]] page on PER: https://archive.org/details/0893037893ProgrammingThe65816/page/n501
* [[Eyes & Lichty]], [https://archive.org/details/0893037893ProgrammingThe65816/page/475 page 475] on PER
* [[Labiak]] page on PER: https://archive.org/details/Programming_the_65816/page/n169
* [[Labiak]], [https://archive.org/details/Programming_the_65816/page/n169 page 159] on PER
* snes9x implementation of PER: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L1685
* undisbeliever on PER: https://undisbeliever.net/snesdev/65816-opcodes.html#per-push-effective-pc-relative-indirect-address
* Clark, Bruce. http://www.6502.org/tutorials/65c816opcodes.html#6.8.1


[[Category:ASM]]
[[Category:ASM]]
[[Category:65c816 additions]]
[[Category:65c816 additions]]
[[Category:Push Instructions]]
[[Category:Three-byte Instructions]]
[[Category:Six-cycle Instructions]]

Latest revision as of 23:00, 12 August 2024

Basic Info
Addressing Mode Opcode Length Speed
Stack (PC Relative Long) 62 3 bytes 6 cycles
Flags Affected
N V M X D I Z C
. . . . . . . .

PER (Push pc RElative indirect Address) is a 65c816 instruction that pushes a 16-bit sum to the stack. The addends are:

  • the program counter after it has been incremented to point to the instruction following PER, and
  • the 16-bit displacement following the PER opcode.

The high byte of the sum is pushed before the low byte.

No flags are affected. Neither the program bank register or program counter are modified either.

Syntax

PER label
PER #label

Assemblers that accept PER with the # syntax are rare.

PER works even in emulation mode.

See Also

External Links