二十 子程式設計(函式)

2021-09-10 07:07:27 字數 2375 閱讀 4278

把具有一定功能的程式段封裝成子程式,以供它人呼叫。

引數:告訴子程式將要處理哪些數值。

結果:子程式運算後的結果值。

;加法運算

assume cs:code,ds:data,ss:stack

data segment

data ends

stack segment

dw 256 dup (0h)

stack ends

code segment

start:

mov ax,stcak

mov ss,ax

mov sp,60h

mov ax,10h

mov bx,11h

call s0

mov ax,12h

mov bx,31h

call s0

mov ax,bx

mov ax,bx

;功能:計算兩個數值相加後的結果

;引數:ax與bx暫存器中存放加數

;結果:cx暫存器用於存放結果

s0: mov cx,ax

add cx,bx

retmov ax,4c00h

int 21h

code ends

end start

a 通過暫存器傳遞

b 通過記憶體傳遞

c 通過棧傳遞

;1111h + 2222h + 0333h + 0001h + 0002h

assume cs:code,ds:data,ss:stack

data segment

dw 256 dup (0h)

data ends

stack segment

dw 256 dup (0h)

stack ends

code segment

start:

mov ax,stcak

mov ss,ax

mov sp,60h

mov ax,data

mov ds,ax

mov bx,0000h

mov word ptr ds:[bx+0000h],1111h

mov word ptr ds:[bx+0002h],2222h

mov word ptr ds:[bx+0004h],0333h

mov word ptr ds:[bx+0006h],0001h

mov wprd ptr ds:[bx+0008h],0002h

call s0

nopnop

;功能:計算5個連續數值的和

;結果:cx暫存器是運算結果

s0: mov cx,ds:[bx+0000h]

add cx,ds:[bx+0002h]

add cx,ds:[bx+0004h]

add cx,ds:[bx+0006h]

add cx,ds:[bx+0008h]

retmov ax,4c00h

int 21h

code ends

end start

子程式的設計要以保持暫存器值的平衡,棧空間的平衡為原則。

函式執行前將引數使用的暫存器源資料儲存push棧,函式結束後再pop棧恢復源暫存器資料。

assume cs:code,ds:data,ss:stack

data segment

dw 256 dup (0h)

data ends

stack segment

dw 256 dup (0h)

stack ends

code segment

start:

mov ax,stcak

mov ss,ax

mov sp,60h

mov ax,data

mov ds,ax

mov ax,0011h

mov bx,0022h

call s0

nopnop

;甲編寫**

;xx,bx作為引數,cx作為返回值

s0: push ax

push bx

push dx

mov cx,ax

add cx,bx

;注意出棧順序

pop dx

pop bx

pop ax

retmov ax,4c00h

int 21h

code ends

end start

子程式設計

知識提要 掌握子程式的定義語句 過程名 proc near far 過程體ret 過程名 endp 其中過程名的命名方法與變數名相同,同一源程式中不能有相同的過程名.proc為過程定義開始的偽指令,endp為過程定義結束偽指令,且proc endp必須配對使用。配對的proc endp前面的過程名應...

子程式設計

子程式設計時 push bp mov bp,sp sub sp,2 再push其他需要儲存的暫存器,這樣可以不受儲存要暫存器個數的影響,用 bp 4 定位到第乙個引數 且釋放區域性變數空間時使用 mov sp,bp 即可。巨集呼叫中的引數如果有小於 符號,需要轉義,寫為 定式 if while do...

函式式程式設計(四) 函式組合 函子

純函式和柯里化很容易寫出洋蔥 h g f x 就是乙個函式鑲嵌另乙個函式,多重組合,最終實現我們想要的功能,就像下面這個洋蔥一樣 函式組合,就是利用多個函式,把細粒度的函式重新組合生成乙個新的函式,從而實現我們想要的邏輯。比如 獲取陣列的最後乙個元素再轉換成大寫字母,toupper first re...