![Samsung S3F84B8 Скачать руководство пользователя страница 147](http://html.mh-extra.com/html/samsung/s3f84b8/s3f84b8_user-manual_347832147.webp)
S3F84B8_UM_REV 1.00
6 INSTRUCTION SET
6-25
6.3.13 CALL — CALL PROCEDURE
CALL
dst
Operation
: SP
SP – 1
@SP
PCL
SP
SP
–1
@SP
PCH
PC
dst
The current contents of program counter are pushed onto the top of stack. Here, the program
counter value used specifies the address of first instruction following the CALL instruction. The
specified destination address is then loaded into the program counter and it points to the first
instruction of a procedure. At the end of the procedure, the return instruction (RET) can be used
to return to the original program flow. RET pops the top of stack back into the program counter.
Flags
:
No flags are affected.
Format
:
Bytes Cycles
Opcode
(Hex)
Addr Mode
dst
opc dst 3
14
F6 DA
opc
dst
2
12
F4 IRR
opc
dst
2
14
D4 IA
Examples
:
Given R0 = 35H, R1 = 21H, PC = 1A47H, and SP = 0002H:
CALL
3521H
SP = 0000H
(Memory locations 0000H = 1AH, 0001H = 4AH, where
4AH
is
the
address
that follows the instruction.)
CALL
@RR0
SP = 0000H (0000H = 1AH, 0001H = 49H)
CALL
#40H
SP = 0000H (0000H = 1AH, 0001H = 49H)
In the first example, if the program counter (PC) value is 1A47H and the stack pointer contains
the value 0002H, the statement “CALL 3521H” pushes the current PC value onto the top of
stack. The stack pointer now points to memory location 0000H. PC is then loaded with the value
3521H, the address of first instruction in the program sequence to be executed.
If the contents of program counter and stack pointer are the same (as specified in the first
example), the statement “CALL @RR0” produces the same result, except that 49H is stored in
stack location 0001H (because the two-byte instruction format was used). PC is then loaded with
the value 3521H, the address of first instruction in the program sequence to be executed.
Assuming the contents of program counter and stack pointer are the same (as specified in the
first example), if program address 0040H contains 35H and program address 0041H contains
21H, the statement “CALL #40H” produces the same result (as specified in the second example).