Skip to main content

Stack Operations Instructions (Part-I) - PUSH and POP

WHAT IS A STACK:
  • The stack is a part of read/write memory which is used for the purpose of storing information temporarily.
  • When the information is written on the stack, the operation is called PUSH.
  • When the information is read from the stack, the operation is called POP.
  • The stack is operated with the help of special memory pointer register called stack pointer (SP).
  • Stack pointer (SP) gives the address of the memory location where the information is to written or to be read.
PUSH Rp:
  • This instruction is used to write 16-bit data on the stack.
  • It decrements stack pointer by one.
  • Then the contents of higher order register of Rp are copied to the memory location pointed by stack pointer.
  • Then stack pointer is again decremented by one.
  • The contents of lower order register of Rp are copied to the memory location pointed by stack pointer.
  • Rp can by BC, DE, HL or PSW.
NOTE: PSW stands for program status word. It has accumulator (A register) as higher order register and flag register as lower order register.

  • Only higher order register is specified in the instruction for Rp.
  • No flags are affected.
  • It is a one byte instruction.
  • Register indirect addressing mode is used.
Example:
If SP = 2000H, DE = 4320H, then
PUSH D ; This instruction will decrement SP by one (SP = 1FFFH) and will copy the contents of D (43H) into memory location 1FFFH. Then it will decrement SP again by one (SP = 1FFEH) and will copy the contents of E (20H) into memory location 1FFEH.

Before execution:

After execution:

POP Rp:
  • This instruction copies the contents of the memory location pointed by stack pointer into the lower order register of Rp.
  • Then stack pointer is incremented by one.
  • The contents of the memory location pointed by stack pointer are copied to the higher order register of Rp.
  • Then stack pointer is again incremented by one.
  • Rp can be BC, DE, HL or PSW.
  • Only higher order register is specified in the instruction for Rp.
  • No flags are affected.
  • It is a one byte instruction.
  • Register indirect addressing mode is used.
Example:
If SP = 2000H, (2000H) = 10H and (2001H) = 13H, then
POP B ; This instruction will copy the contents of the memory location pointed by SP i.e. 2000H into C register i.e. C = 10H. Then it will increment SP by one (SP = 2001H) and will copy the contents of the memory location pointed by SP i.e. 2001H into B register i.e. B = 13H. Then it will increment SP again by one (SP = 2002H).

Before execution:
After execution:

Comments

Popular posts from this blog

Program to pack the two unpacked BCD numbers

Statement: Pack the two unpacked BCD numbers stored in memory locations 2000H and 2001H and store the result in memory location 2002H. The least significant digit is stored at 2000H. Example: (2000H) = 04H (2001H) = 09H Result = (2002H) = 94H Program: LDA 2001H                        ; Obtain the most significant BCD digit RLC                                    ; Rotate left  RLC                                    ; Rotate left  RLC                                    ; Rotate left  RLC                                    ; Rotate left...

Program to exchange the contents of two memory locations

Statement: Exchange the contents of memory locations 2000H and 2001H. Example:  Initially, (2000H) = 34H (2001H) = 20H After exchanging, (2000H) = 20H (2001H) = 34H Program 1 using direct addressing instructions: LDA 2000H               ; Get the contents of location 2000H into accumulator MOV B, A                  ; Move the contents of accumulator into register B LDA 2001H                ; Get the contents of location 2001H into accumulator STA 2000H                 ; Store the contents of accumulator into location 2000H MOV A, B                  ; Move the contents of register B into accumulator STA 2001H                 ; Store the contents of accumulator into location 2001H HLT  ...

Program to add the contents of two memory locations

Statement: Add the contents of memory locations 2000H and 2001H and place the result in the memory locations 2002H and 2003H. Example: (2000H) = C3H (2001H) = 29H Result = C3H + A9H = 016CH (2002H) = 6CH (2003H) = 01H Program: LXI H, 2000H                   ; HL points to location 2000H MOV A, M                        ; Move the contents of 2000H into accumulator INX H                                ; HL points to location 2001H ADD M                              ; Add the contents of 2001H with the contents of accumulator INX H                                ; HL points to location 2002H MOV M, A      ...