0% found this document useful (0 votes)
291 views

Stack and Subroutines

The document discusses the stack and subroutines in assembly language, describing how the stack uses a LIFO structure and grows backwards in memory, and how subroutines can be called using the CALL instruction and returned from using the RTE instruction. It also provides examples of programs that demonstrate using the stack and subroutines, such as a program that resets and displays flags and a program that displays values on a seven segment display using a delay subroutine.

Uploaded by

Muhammad Obaid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
291 views

Stack and Subroutines

The document discusses the stack and subroutines in assembly language, describing how the stack uses a LIFO structure and grows backwards in memory, and how subroutines can be called using the CALL instruction and returned from using the RTE instruction. It also provides examples of programs that demonstrate using the stack and subroutines, such as a program that resets and displays flags and a program that displays values on a seven segment display using a delay subroutine.

Uploaded by

Muhammad Obaid
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 25

Stacks &

Subroutines
The Stack
oThe stack is an area of memory identified
by the programmer for temporary storage
of information.

o The stack is a LIFO (Last In First Out. )


structure.

o The stack normally grows


backwards
into memory.
o In other words, the programmer
defines the of the stack
and the bottom grows up
reducing address range. into
stack
The Stack
oGiven that the stack grows backwards into memory, it
is customary to place the bottom of the stack at the end
of memory to keep it as far away from user programs
as possible.

oIn the 8085, the stack is defined by setting the SP


(Stack Pointer) register.
LXI SP, FFFFH

oThis sets the Stack Pointer to location FFFFH (end of


memory for the 8085).
Saving Information on the
Stack
oInformation is saved on the stack by PUSHing
it on.
oIt is retrieved from the stack by POPing it off.

oThe 8085 provides two instructions: PUSH


and POP for storing information on the stack
and retrieving it back.

oBoth PUSH and POP work with register pairs


ONLY.
The PUSH Instruction
● PUSH B/D/H/PSW
o Decrement SP
o Copy the contents of register B to the memory
pointedlocation
to by SP
o Decrement SP
o Copy the contents of register C to the memory
pointedlocation
to by SP
The POP Instruction
● POP B/D/H/PSW
o Copy the contents of the memory location pointed to by
the
SP
o to register E SP
Increment
o Copy the contents of the memory location pointed to by
SP to register
the D
o Increment
SP
Operation of the Stack
oDuring pushing, the stack operates in a
“decrement then store” style.
oThe stack pointer is decremented first, then
the information is placed on the stack.

oDuring poping, the stack operates in a “use


then increment” style.
oThe information is retrieved from the top of the the
stack and then the pointer is incremented.

o The SP pointer always points to “the top of the stack”.


LIFO
●The order of PUSHs and POPs must be opposite of each
other in order to retrieve information back into its original
location.

PUSH B
PUSH
D
...
POP D
POP B

● Reversing
the order
of the
POP
instructio
ns will
The PSW Register Pair
o The 8085 recognizes one additional pair
register called the PSW (Program Status Word).

oThis register pair is made up of the Accumulator and


the Flags registers.

oIt is possible to push the PSW onto the stack, do


whatever operations are needed, then POP it off of the
stack.

oThe result is that the contents of the Accumulator and


the status of the Flags are returned to what they were
before the operations were executed.
Cautions with PUSH and

POP
PUSH and POP should be used in opposite
order.
● There has to be as many POP’s as there are
PUSH’s.
●If not, the RET statement will pick up the

wrong information from the top of the stack and


the program will fail.
●It is not advisable to place PUSH or POP
inside a loop.
Program to Reset and display
Flags
oClear all Flags.
oLoad 00H in the accumulator, and
demonstrate that the zero flag is not affected
by data transfer instruction.
oLogically OR the accumulator with itself to
set the Zero flag, and display the flag at
PORT1 or store all flags on the stack.
Program to Reset and display
Flags
● XX00 LXI SP, XX99H Initialize the stack
● 03 MVI L, 00H Clear L
● 05 PUSH H Place (L) on stack
● 06 POP PSW Clear Flags
● 07 MVI A, 00H Load 00H
● 09 PUSH PSW Save Flags on stack
● 0A POP H Retrieve flags in L
● 0B MOV A, L
● 0C OUT PORT0 Display Flags (00H)
● 0E MVI A, 00H Load 00H Again
Program to Reset and display
Flags
●XX10 ORA A Set Flags and reset
CY, AC
● 11 PUSH PSW Save Flags on Stack
● 12 POP H Retrieve Flags in L
● 13 MOV A, L
● 14 ANI 40H Mask all Flags except Z
● 16 OUT PORT1 Displays 40H
● 18 HLT End of Program
Subroutines
oA subroutine is a group of instructions that will be used
repeatedly in different locations of the program.

oRather than repeat the same instructions several


times, they can be grouped into a subroutine that is
called from the different locations.

oIn Assembly language, a subroutine can exist


anywhere in the code.
oHowever, it is customary to place subroutines
separately from the main program.
Subroutines
oThe 8085 has two instructions for dealing with
subroutines.

oThe CALL instruction is used to redirect


program execution to the subroutine.

oThe RTE instruction is used to return the


execution to the calling routine.
The CALL Instruction
● CALL 4000H
o 3-byte instruction.
o Push the address of the instruction immediately following the
CALL onto the stack and decrement the stack pointer register by
two.
o Load the program counter with the 16-bit address supplied
with the CALL instruction.
o Jump Unconditionally to memory location.
The RTE Instruction
● RTE
o 1-byte instruction
o Retrieve the return address from the top of the stack and
increments stack pointer register by two.
o Load the program counter with the return address.
o Unconditionally returns from a subroutine.
Passing Data to a
Subroutine
o In Assembly Language data is passed to a
subroutine through registers.
oThe data is stored in one of the registers by the calling
program and the subroutine uses the value from the
register.

oThe other possibility is to use agreed upon memory


locations.
oThe calling program stores the data in the memory
location and the subroutine retrieves the data from the
location and uses it.
RESTART, CONDITIONAL CALL
& RETURN INSTRUCTIONS

RST Instruction
RESTART, CONDITIONAL CALL
& RETURN INSTRUCTIONS

Conditional CALL
RESTART, CONDITIONAL CALL
& RETURN INSTRUCTIONS

Conditional RETURN
A Proper Subroutine

o According to Software Engineering practices, a


proper subroutine:
oIs only entered with a CALL and exited with an
RTE
o Has a single entry point
o Do not use a CALL statement to jump into
different points of the same subroutine.
Writing Subroutines
Write a Program that will display FF and 11 repeatedly on the
seven segment display. Write a ‘delay’ subroutine and Call it as
necessary.
C000: LXI

SP, FFFF C003:


MVI A, FF C005:
OUT 00
C007: CALL C014
C00A: MVI A, 11

C00C: OUT 00
C00E: CALL 1420
Writing Subroutines

DELAY: C014: MVIB, FF


C016: MVIC, FF
C018: DCR C
C019: JNZ C018
C01C: DCR B
C01D: JNZ C016
C020: RET
Problem Statement

You might also like