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)
