存储单元传递参数,第1张

存储单元传递参数,第2张

调用子程序时,当需要向子程序传递大量数据时,由于寄存器容量的限制,我们不能使用寄存器传递参数,而是使用约定的存储单元传递方法。这种参数传递的模式有点像情报人员和联络人员之间的信息传递模式。一个向指定地点发送信息,一个从指定地点取信息。

示例7.2是使用约定的存储单元来传递参数的示例。处理后的数据并不直接传送到子程序,而是将数据存储的地址告诉子程序。

例7.4:写一个子程序,对一个字符串中的数字字符、字母等字符进行分类和计数。字符串的首地址由DS:DX指定(字符串以0结尾),各个字符的编号分别存储在BX、CX和DI中。

解决方案:
;子程序功能:分类统计字符串中的数字字符、字母和其他字符的个数。

;参数:DS:DX指向要统计的字符串。

;导出参数:、、DI分别存储数字字符、字母和其他字符的个数。

;算法描述:1。当字符在' 0'~'9 '范围内时,数字字符BX数增加1;

2.为了判断简单,先把字母变成大写字母;

3.当字符在' A'~'Z '范围内时,CX的字母数增加1;

4.否则,其他字符数DI加1。

count proc
PUSHAX
PUSHSI
xor bx,BX
XORCX,CX
XORDI,DI;以上三条指令再次清除各种字符计数
movsi,dx
:moval,[si]
incsi
cmpal,0
jeover
cmpal,' 0'
。字符数再加1
jmp
下一步:调用upper调用子程序将AL中的字母改为大写字母
CMP AL,' a'
JLOther
CMP AL,' z '
jg other
INCCX;字母数再加1
jmp
other:incdi;其他字符数再加1
jmp
over:popsi
popax
ret
countendp。

例7.5显示任意字符串中数字字符、字母和其他字符的个数。
解决方案:
。modelsmall
。data
msgdb ' ksd JL 0984/[]3 iou oiu(* &(5341 ',0
。代码
。start DS:DX指向要计数的字符串
call count;调用子程序统计各类字符的个数
CALLDISPBX;调用子程序显示数字字符个数
MOVBX,CX
CALLDISPBX;调用子程序显示字母数
MOVBX,DI
CALLDISPBX;调用子例程显示其他字符的个数
。退出0
结束

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 存储单元传递参数

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情