45.2.2 Extended Instruction Set
{label}
instruction argument(s)
ADDULNK | Add Literal to FSR2 and Return | |||
---|---|---|---|---|
Syntax | ADDULNK k |
|||
Operands |
0 ≤ k ≤ 63 |
|||
Operation |
(FSR2) + k → FSR2 |
|||
Status Affected | None | |||
Encoding | 1110 |
1000 |
11kk |
kkkk |
Description |
The 6-bit literal ‘k’ is added to the contents of FSR2. A
|
|||
Words | 1 | |||
Cycles | 2 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | Read literal ‘k’ | Process Data | Write to destination |
No operation | No operation | No operation | No operation |
Example:
ADDULNK 23h
Before Instruction
FSR2 = 03FFh
PC = 0100h
After Instruction
FSR2 = 0422h
PC = (TOS)
MOVSF | Move Indexed to f | |||
---|---|---|---|---|
Syntax | MOVSF [zs], fd |
|||
Operands |
0 ≤ zs ≤ 127 |
|||
Operation |
((FSR2) + zs) → fd |
|||
Status Affected | None | |||
Encoding | 1110 |
1011 |
0zszszs |
zszszszs |
1111 |
fdfdfdfd |
fdfdfdfd |
fdfdfdfd |
|
Description |
The contents of the source register are moved to destination register
‘fd’. The actual address of the source register is determined
by adding the 7-bit literal offset ‘zs’ in the first word to the
value of FSR2. The address of the destination register is specified by the
12-bit literal ‘fd’ in the second word. Both addresses can be
anywhere in the 4096-byte data space ( Note:
|
|||
Words | 2 | |||
Cycles | 2 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | Determine source address | Determine source address | Read source register |
Decode |
No operation |
No operation | Write register ‘fd’ |
Example:
MOVSF [05h], REG2
Before Instruction
FSR2 = 80h
Contents of 85h
= 33h
REG2 = 11h
Address of REG2 = 100h
After Instruction
FSR2 = 80h
Contents of 85h
= 33h
REG2 = 33h
Address of REG2 = 100h
MOVSFL | Move Indexed to f (Long Range) | |||
---|---|---|---|---|
Syntax | MOVSFL [zs], fd |
|||
Operands |
0 ≤ zs ≤ 127 |
|||
Operation |
((FSR2) + zs) → fd |
|||
Status Affected | None | |||
Encoding | 0000 |
0000 |
0110 |
0010 |
1111 |
xxxzs |
zszszszs |
zszsfdfd |
|
1111 |
fdfdfdfd |
fdfdfdfd |
fdfdfdfd |
|
Description |
The contents of the source register are moved to destination register
‘fd’. The actual address of the source register is determined
by adding the 7-bit literal offset ‘zs’ in the first word to the
value of FSR2 (14 bits). The address of the destination register is
specified by the 14-bit literal ‘fd’ in the second word. Both
addresses can be anywhere in the 16 Kbyte data space ( |
|||
Words | 3 | |||
Cycles | 3 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | No operation | No operation | No operation |
Decode | Read source register | Process Data | No operation |
Decode |
No operation |
No operation | Write register ‘fd’ |
Example:
MOVSFL [05h], REG2
Before Instruction
FSR2 = 2080h
Contents of 2085h
= 33h
REG2 = 11h
Address of REG2 = 2000h
After Instruction
FSR2 = 2080h
Contents of 2085h
= 33h
REG2 = 33h
Address of REG2 = 2000h
MOVSS | Move Indexed to Indexed | |||
---|---|---|---|---|
Syntax | MOVSS [zs], [zd] |
|||
Operands |
0 ≤ zs ≤ 127 |
|||
Operation |
((FSR2) + zs) → ((FSR2) + zd) |
|||
Status Affected | None | |||
Encoding | 1110 |
1011 |
1zszszs |
zszszszs |
1111 |
xxxx |
xzdzdzd |
zdzdzdzd |
|
Description |
The contents of the source register are moved to the destination register.
The addresses of the source and destination registers are determined by
adding the 7-bit literal offsets ‘zs’ or ‘zd’
respectively to the value of FSR2. Both registers can be located anywhere in
the 16 Kbyte data memory space ( The If the resultant source address points to an indirect addressing register,
the value returned will be |
|||
Words | 2 | |||
Cycles | 2 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | Determine source address | Determine source address | Read source register |
Decode | Determine destination address | Determine destination address | Write to destination register |
Example:
MOVSS [05h], [06h]
Before Instruction
FSR2 = 80h
Contents of 85h
= 33h
Contents of 86h
= 11h
After Instruction
FSR2 = 80h
Contents of 85h
= 33h
Contents of 86h
= 33h
PUSHL | Store Literal at FSR2, Decrement FSR2 | |||
---|---|---|---|---|
Syntax | PUSHL k |
|||
Operands |
0 ≤ k ≤ 255 |
|||
Operation |
k → FSR2 |
|||
Status Affected | None | |||
Encoding | 1111 |
1010 |
kkkk |
kkkk |
Description |
The 8-bit literal ‘k’ is written to the data memory address specified by FSR2. FSR2 is decremented by 1 after the operation. This instruction allows users to push values onto a software stack. |
|||
Words | 1 | |||
Cycles | 1 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | Read literal ‘k’ | Process Data | Write to destination |
Example:
PUSHL 08h
Before Instruction
FSR2 = 01ECh
Contents of 01ECh
= 00h
After Instruction
FSR2 = 01EBh
Contents of 01ECh
= 08h
SUBULNK | Subtract Literal from FSR2 and Return | |||
---|---|---|---|---|
Syntax | SUBULNK k |
|||
Operands |
0 ≤ k ≤ 63 |
|||
Operation |
(FSR2) – k → FSR2 |
|||
Status Affected | None | |||
Encoding | 1110 |
1001 |
11kk |
kkkk |
Description |
The 6-bit literal ‘k’ is subtracted from the contents of FSR2.
A |
|||
Words | 1 | |||
Cycles | 2 |
Q Cycle Activity:
Q1 | Q2 | Q3 | Q4 |
Decode | Read literal ‘k’ | Process Data | Write to destination |
No operation | No operation | No operation | No operation |
Example:
SUBULNK 23h
Before Instruction
FSR2 = 03FFh
PC = 0100h
After Instruction
FSR2 = 03DCh
PC = (TOS)