论坛
门户
内部优惠
喜欢
话题
VIP会员
搜索
新浪微博
登录
注册
100%
100%
首页
>
软件开发
>
汇编语言
>
经典汇编语言教程:10.1 字符串的处理程序
回复
« 返回列表
111111
精灵王
注册日期
2010-12-08
发帖数
640
QQ
火币
1103枚
粉丝
120
关注
75
加关注
写私信
打招呼
阅读:
3952
回复:
0
经典汇编语言教程:10.1 字符串的处理程序
楼主
#
更多
只看楼主
倒序阅读
发布于:2013-01-28 14:19
保存
100%
100%
[]
1
例10.2编写一个把字符串中的所有小写字符转换成大写字符的子程序
Strupr
,要求字符串的首地址和结束符为其入口参数。
解:
.MODEL SMALL, C
.DATA
buff
DB "This is a example.", 0
.CODE
Strupr
PROC USES AX BX, String:PTR BYTE, Tail:BYTE
MOV
BX, String
.REPEAT
MOV
AL, [BX]
.IF AL>='a' ;; AL<='z'
SUB
AL, 20H
MOV
[BX], AL
.ENDIF
INC
BX
.UNTIL
AL==Tail
RET
Strupr
ENDP
.STARTUP
INVOKE Strupr, ADDR buff, 0
.EXIT 0
END
例10.3编写一个从字符串中拷贝子串的子程序Strncpy,它有四个参数str1、str2、idx和num,其具体功能为把字符串str2中从第idx个(从0开始记数)字符开始、num个字符传送给str1,字符串str1和str2都是以ASCII码0为结束符。
解:
.MODEL
SMALL, C
.DATA
str1
DB "12345ABCDEF", 0
str2
DB 20 DUP('A')
.CODE
Strlen
PROC USES AX BX, String:PTR BYTE
……
;参见例10.1
Strlen
ENDP
Strncpy
PROC USES AX CX DI SI DS ES, str1:FAR PTR BYTE, str2:FAR PTR BYTE, idx:WORD, num:WORD
LES
DI, str1
LDS
SI, str2
;取两个字符串的首地址
INVOKE
Strlen, SI
;计算源字符串的长度,在
CX
中
MOV
AX, idx
.IF AX >= CX
;若字符起点就超过源串的长度
MOV
BYTE PTR ES:[DI], 0
;拷贝的字符串为“空”
JMP
over
.ENDIF
ADD
SI, AX
;定源串中字符的起点
SI
MOV
CX, num
CLD
.REPEAT
LODSB
STOSB
.UNTILCXZ AL==0
.IF AL!=0
;设置目标串的结束符
MOV
BYTE PTR[DI], 0
.ENDIF
over:
RET
Strncpy
ENDP
.STARTUP
INVOKE
Strncpy, ADDR str2, ADDR str1, 3, 5
.EXIT
0
END
喜欢
0
评分
0
最新喜欢:
回复
100%
发帖
回复
« 返回列表
普通帖
您需要登录后才可以回帖,
登录
或者
注册
100%
返回顶部
关闭
最新喜欢