1
6.7kviews
Explain various techniques used to pass parameter to the subroutine.
1 Answer
0
127views
  1. Procedures are written to process data or address variables from the main program.
  2. To achieve this, it is necessary to pass the information about address, variables or data. This technique is called as parameter passing.
  3. The four major ways of passing parameters to and from a procedure are: -
  4. Passing parameters using registers
  5. Passing parameters using memory
  6. Passing parameters using pointers
  7. Passing parameters using stack

Passing parameters using registers-

The data to be passed is stored in the registers and these registers are accessed in the procedure to process the data.

Example:

.model small

.data

MULTIPLICAND DW 1234H

MULTIPLIER DW 4232H

.code

MOV AX, MULTIPLICAND

MOV BX, MULTIPLIER

CALL MULTI

 :

 :

MULTI PROC NEAR

MUL BX              ; Procedure to access data from BX register

RET

MULTI ENDP

:

:

END

The disadvantage of using registers to pass parameters is that the number of registers limits the number of parameters you can pass.

E.g. An array of 100 elements can’t be passed to a procedure using registers.

Passing parameters using memory-

In the cases where few parameters have to be passed to and from a procedure, registers are convenient. But, in cases when we need to pass a large number of parameters to procedure, we use memory. This memory may be a dedicated section of general memory or a part of it.

Example:

.model small

.data

MULTIPLICAND DW 1234H       ; Storage for multiplicand value

MULTIPLIER DW 4232H     ; Storage for multiplier value

MULTIPLICATION DW ?     ; Storage for multiplication result

.code

MOV AX, @Data

MOV DS, AX

:

:

CALL MULTI

:

:

MULTI PROC NEAR

MOV AX, MULTIPLICAND

MOV BX, MULTIPLIER

:

:

MOV MULTIPLICATION, AX    ; Store the multiplication value in named memory location

RET

MULTI ENDP

END

Passing parameter using pointers-

A parameter passing method which overcomes the disadvantage of using data item names (i.e. variable names) directly in a procedure is to use registers to pass the procedure pointers to the desired data.

Example:

.model small

.data

MULTIPLICAND DB 12H     ; Storage for multiplicand value

MULTIPLIER DB 42H           ; Storage for multiplier value

MULTIPLICATION DW ?     ; Storage for multiplication result

.code

 MOV AX, @Data

 MOV DS, AX

MOV SI, OFFSET MULTIPLICAND

 MOV DI, OFFSET MULTIPLIER

 MOV BX, OFFSET MULTIPLICATION

 CALL MULTI

 :

:

MULTI PROC NEAR

:

:

MOV AL, [SI]            ; Get multiplicand value pointed by SI in accumulator

MOV BL, [DI]            ; Get multiplier value pointed by DI in BL

:

:

MOV [BX], AX            ; Store result in location pointed out by BX

RET

MULTI ENDP

END

Passing parameters using stack-

In order to pass the parameters using stack we push them on the stack before the call for the procedure in the main program. The instructions used in the procedure read these parameters from the stack. Whenever stack is used to pass parameters it is important to keep a track of what is pushed on the stack and what is popped off the stack in the main program.

Example:

.model small

.data

MULTIPLICAND DW 1234H

MULTIPLIER DW 4232H

.code

MOV AX, @data

MOV DS, AX

 :

:

PUSH MULTIPLICAND

PUSH MULTIPLIER

CALL MULTI

:

:

MULTI PROC NEAR

PUSH BP

MOV BP, SP              ; Copies offset of SP into BP

MOV AX, [BP + 6]            ; MULTIPLICAND value is available at

                                         ; [BP + 6] and is passed to AX

MUL WORD PTR [BP + 4]       ; MULTIPLIER value is passed

POP BP

RET                 ; Increments SP by 4 to return address

MULTI ENDP              ; End procedure

END
Please log in to add an answer.