二十、子程序设计(函数)
函数 程序设计 二十
2023-09-14 09:13:26 时间
1. 模块化程序设计
把具有一定功能的程序段封装成子程序,以供它人调用。
参数:告诉子程序将要处理哪些数值。
结果:子程序运算后的结果值。
;加法运算
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
ret
mov ax,4c00H
int 21H
code ends
end start
2. 子程序数据传递
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
nop
nop
;功能:计算5个连续数值的和
;参数:通过内存存储参数,起始地址值在bx寄存器中
;结果: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]
ret
mov ax,4c00H
int 21H
code ends
end start
3. 子程序安全调用
子程序的设计要以保持寄存器值的平衡,栈空间的平衡为原则。
函数执行前将参数使用的寄存器源数据保存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
nop
nop
;甲编写代码
;xx,bx作为参数,cx作为返回值
s0:
push ax
push bx
push dx
mov cx,ax
add cx,bx
;注意出栈顺序
pop dx
pop bx
pop ax
ret
mov ax,4c00H
int 21H
code ends
end start
相关文章
- 欧拉函数求法
- 【说站】c语言中static如何修饰函数
- javascript学习之函数组合
- C++ tellg和tellp函数用法详解
- MySQL中的加减函数实现(mysql加减函数)
- Linux下getcwd函数的用法和作用(linuxgetcwd)
- Oracle日期加减函数的用法及示例(oracle日期加减函数)
- Linux程序设计中printf函数的使用(printflinux)
- Linux中使用bzero函数实现内存清零(linuxbzero)
- MySQL 中使用 DAYS 函数进行日期计算(mysql中days)
- Javascript强制类型转换函数
- JavaScript高级程序设计(第3版)学习笔记8js函数(中)