经典汇编语言教程:7.3.2 存储单元传递参数

7.3.2 存储单元传递参数

在调用子程序时,当需要向子程序传递大量数据时,因受到寄存器容量的限制,就不能采用寄存器传递参数的方式,而要改用约定存储单元的传送方式。这种参数传递方式有点象情报人员和联络人员之间的传递信息方式,一个向指定地点放情报,另一个从指定地点取情报。

例7.2是采用约定存储单元传递参数的例子,所处理的数据不是直接传给子程序,而是把存储它们的地址告诉子程序。

例7.4:编写一个子程序分类统计出一个字符串中数字字符、字母和其它字符的个数。该字符串的首地址用DS:DX来指定(以0为字符串结束),各类字符个数分别存放BX、CX和DI中。

解:
;子程序功能:分类统计出字符串中数字字符、字母和其它字符的个数
;入口参数:DS:DX指向被统计的字符串
;出口参数:BX、CX和DI分别保存数字字符、字母和其它字符的个数
;算法描述:1、当字符在'0'~'9'范围时,数字字符个数BX加1;
2、为了判断简单,先把字字母变成大写字母;
3、当字符在'A'~'Z'范围时,字母个数CX加1;
4、否则,其它字符个数DI加1。
COUNTPROC
PUSHAX
PUSHSI
XORBX, BX
XORCX, CX
XORDI, DI;上三条指令使各类字符计数清零
MOVSI, DX
again:MOVAL, [SI]
INCSI
CMPAL, 0
JEover
CMPAL, '0'
JLother
CMPAL, '9'
JGnext
INCBX;数字字符个数加1
JMPagain
next:CALLUPPER;调用子程序把AL中的字母变成大写字母
CMPAL, 'A'
JLother
CMPAL, 'Z'
JGother
INCCX;字母个数加1
JMPagain
other:INCDI;其它字符个数加1
JMPagain
over:POPSI
POPAX
RET
COUNTENDP

例7.5显示出任意字符串中数字字符、字母和其它字符的个数。

解:
.MODELSMALL
.DATA

MSG

DB 'KSDJ L0984/[]3oiu OIU OIU (*&(5341', 0
.CODE
.STARTUP
LEADX, MSG;DS:DX指向待统计的字符串
CALLCOUNT;调用子程序统计出各类字符的个数
CALLDISPBX;调用子程序显示数字字符的个数
MOVBX, CX
CALLDISPBX ;调用子程序显示字母的个数
MOVBX, DI
CALLDISPBX;调用子程序显示其它字符的个数
.EXIT 0
END

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号