Example on passing parameters through stack, Computer Engineering

Assignment Help:

Q. Example on Passing Parameters through Stack?

PROGRAM: Version 3

DATA_SEG               SEGMENT

                        BCD DB 25h; Storage for BCD test value

BIN DB?  ; Storage for binary value

DATA_SEG               ENDS

STACK_SEG   SEGMENT      STACK

DW 100 DUP (0); Stack of 100 words

TOP_STACK   LABEL    WORD

STACK_SEG   ENDS

CODE_SEG SEGMENT

ASSUME CS: CODE_SEG, DS: DATA_SEG, SS: STACK_SEG

START:           MOV AX, DATA                  ; Initialise data segment

 

MOV DS, AX                                    ; using AX register

MOV AX, STACK-SEG.      ; initialise stack segment

MOV SS, AX                         ; using AX register

MOV SP, OFFSET TOP_STACK; initialise stack pointer

MOV AL, BCD                      ; Move BCD value into AL

PUSH AX                               ; and push it onto word stack

CALL BCD_BINARY          ; Do the conversion

POP AX                                  ; Get the binary value

MOV BIN, AL                       ; and save it

NOP                                        ; Continue with program

 

; PROCEDURE: BCD_BINARY Converts BCD numbers to binary.

; INPUT   : None - BCD value assumed to be on stack before call

; OUTPUT   : None - Binary value on top of stack after return 

; DESTROYS: Nothing

BCD_BINARY PROC NEAR

                                 PUSHF     ; Save flags

                                 PUSH AX; and registers: AX

                                 PUSH BX; BX

                                 PUSH CX; CX

                                 PUSH BP; BP. Why BP?

                                 MOV BP, SP; Make a copy of the

                                                ; stack pointer in BP

                                 MOV   AX, [BP+ 12]; Get BCD number from

                                                ; stack. But why it is on 

 

; BP+12 location? Please note 5 PUSH statements + 1 call which is intra-segment (so 

; just IP is stored) so total 6 words are pushed after AX has been pushed and since it is 

; a word stack so the BCD value is stored on 6 × 2 = 12 locations under stack. Hence 

; [BP + 12] (refer to the figure given on next page).

MOV BL, AL; Save copy of BCD in BL

AND BL, 0Fh; mask lower 4 bits

AND AL, F0H; Separate upper 4 bits

MOV CL, 04; Move upper BCD digit to low

ROR   AL, CL; position BCD digit for multiply location

MOV   BH, 0Ah   ; Load 10 in BH

MUL BH; Multiply upper BCD digit in AL by 10

   ; The result is in AL

ADD   AL, BL; Add lower BCD digit to result.

MOV [BP + 12], AX   ; Put binary result on stack

; Restore flags and registers

POP BP

POP CX

POP BX

            POP AX

                                 POPF  

                                 RET  

BCD_BINARY       ENDP

CODE_SEG            ENDS

END   START  

 

Discussion: 

The parameter is pushed on stack before the procedure call. Procedure call causes the current instruction pointer to be pushed on to stack. In the procedure flags AX, BX, CX and BP registers are also pushed in that order. Hence the stack looks to be:

721_Example on Passing Parameters through Stack.png

The instruction MOV BP, SP transfers contents of the SP to BP register. Now BP is used to access any location in stack by adding appropriate offset to it. For illustration MOV AX, [BP + 12] instruction transfers the word starting at the 12th byte from the top of stack to AX register. It doesn't change the contents of BP register or top of the stack. It copies pushed value of AL and AH at offset 008Eh into the AX register. This instruction isn't equivalent to POP instruction. 

Stacks are useful for writing procedures for multi-user system programs or recursive procedures. It's a decent practice to make a stack diagram as above when using procedure call through stacks. This helps in reducing errors in programming.


Related Discussions:- Example on passing parameters through stack

Simplify the expressions using boolean postulates, Simplify the given expre...

Simplify the given expressions using Boolean postulates XY + X‾Z‾  + XY‾Z (XY + Z) Ans. XY + X‾Z‾ + XY‾Z (XY + Z) = XY + X‾Z‾ + XY‾Z (XY + Z) = XY + X‾Z‾  + XXYY‾Z

Biscuit factory circuit, Biscuits move on a conveyer through an oven where ...

Biscuits move on a conveyer through an oven where they are cooked.   Two sensors, H and C, measure the temperature of the oven, H = 1 if the oven is too hot and C = 1 if the ove

Introduction to the sorted arraylist, Consider  a  collection  class  that ...

Consider  a  collection  class  that  is  similar  to  the ArrayList  class,  except  that  elements  are sorted in a certain order. We will call this class SortedArrayList. This c

Reference table and a reference field, A field containing currency amounts ...

A field containing currency amounts (data type CURR) must be assigned to a reference table and a reference field. Explain. As a reference table, a system having all the valid

IEEE802, 1. (a) Given a baseband bus with station 1 located at 10m, station...

1. (a) Given a baseband bus with station 1 located at 10m, station 2 located at 1000m, and station 3 located at 1010 meters (see diagram above). If the data rate of the bus is 10 M

What is indexed addressing, What is Indexed addressing The location of ...

What is Indexed addressing The location of data is calculated as sum of an address specified by one of previous methods, and value of an index register. This allows an array of

What do you mean by inline function, The idea behind inline functions is to...

The idea behind inline functions is to insert the code of a known function at the point where the function is called. If done carefully, this can improve the application's performa

Entropy - learning decision trees, Entropy - learning decision trees: ...

Entropy - learning decision trees: Through putting together a decision of tree is all a matter of choosing that attribute to test at each node in the tree. Further we shall de

What is pli, What is PLI Programming  Language  Interface  (PLI)  of  V...

What is PLI Programming  Language  Interface  (PLI)  of  Verilog  HDL  is  a  mechanism  to  interface  Verilog programs  with  programs  written  in  C  language.  It also pro

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd