四種傳遞引數的方法

2021-07-10 07:16:48 字數 2167 閱讀 3276

主程式在呼叫子程式時,往往要向子程式傳遞一些引數;同樣,子程式執行後也經常要把一些結果引數傳回給主程式。主程式與子程式之間的這種資訊傳遞稱為引數傳遞。

引數傳遞有四種方法:暫存器引數傳遞,約定儲存單元引數傳遞,利用call後續區進行引數傳遞,利用堆疊進行引數傳遞。

一、暫存器引數傳遞

優點是實現簡單方便,呼叫方便,但是暫存器個數有限,且暫存器往往還要存放其他資料,所以只適合用於要傳遞的引數較少的情況。

程式示例,這裡就不舉例了,利用到這種引數傳遞的例子有很多。

例如,利用ax傳入乙個16位數,轉化為字串並輸出。

二、利用約定儲存單元傳遞引數

這種資料傳遞方式,資料在記憶體中,通常在資料段中,相當於全域性變數。例如,使用乙個字串變數作為引數,傳入函式,輸出乙個16進製制數。

三、利用堆疊傳遞引數

實現方法:主程式在呼叫子程式之前,將需要傳遞的引數依次壓入堆疊,子程式從堆疊中取入口引數;子程式呼叫結束之前,將需要返回的引數依次壓入堆疊,主程式在堆疊中取出引數。

示例:測量字串長度的子程式,設字串以0為結束標誌

;輸入引數通過堆疊傳遞引數

;輸出引數通過暫存器傳遞引數

data segment

str db '123456789',0

len dw ?

data ends

code segment

assume ds:data,cs:code

start:

mov ax,seg str

push ax

mov ax,offset str

push ax

call strlen

mov len,ax

mov ah,4ch

int 21h

code ends

strlen proc

push bp

mov bp,sp

push ds

push si

mov ds,[bp+6] ;將串的段值,載入到資料段暫存器

mov si,[bp+4] ;將串的偏移,傳給si,為讀串做準備

mov al,0

strlen1: cmp al,[si]

jz strlen2

inc si

jmp strlen1

strlen2: mov ax,si

sub ax,[bp+4]

pop si

pop ds

pop bp

ret 4

strlen endp

end start

四、利用call後續區傳遞引數

資料在**段中,很少語言使用此方法,但使用方法接近於高階語言。

示例:測量字串長度的子程式,設字串以0為結束標誌

;輸入引數通過call後續區傳遞引數

;輸出引數通過暫存器傳遞引數

data segment

str db '123456789',0

len dw ?

data ends

code segment

assume ds:data,cs:code

start:

call strlen

dw offset str

dw seg str

mov len,ax

mov ah,4ch

int 21h

code ends

strlen proc

push bp

mov bp,sp

push ds

push si

mov si,[bp+2] ;將子程式返回位址,傳給si,方便引數傳遞

mov ds,cs:[si+2] ;將串的段值,載入到資料段暫存器

mov si,cs:[si] ;將串的偏移,傳給si,為讀串做準備

mov dx,si

mov al,0

strlen1: cmp al,[si]

jz strlen2

inc si

jmp strlen1

strlen2: sub si,dx

add word ptr [bp+2],4;修改返回位址

pop si

pop ds

pop bp

ret 4

strlen endp

end start

C 中四種引數傳遞

using system using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.webcontro...

PHP頁面間引數傳遞的四種方法

第一種 使用客戶端瀏覽器的cookie。cookie很容易理解,就是乙個臨時檔案,可以把它看成乙個儲藏室,瀏覽器在瀏覽的過程中記錄一些資訊,就暫時存放在這裡。在page01中設定乙個cookie。setcookie mycookie 自靈 就是這麼簡單,我們已經建立cookie完畢。我們定義了乙個變...

python函式的四種引數傳遞方式

python中函式傳遞引數有四種形式 fun1 a,b,c fun2 a 1,b 2,c 3 fun3 args fun4 kargs 四種中最常見是前兩種,基本上一般點的教程都會涉及,後兩種一般很少單獨出現,常用在混合模式中 第一種fun1 a,b,c 是直接將實參賦予行參,根據位置做匹配,即嚴格...