汇编语言中如何实现字符串操作
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关汇编语言中如何实现字符串操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。软件:emu8086语言:汇编语言(Assemb
千家信息网最后更新 2025年02月23日汇编语言中如何实现字符串操作
这篇文章将为大家详细讲解有关汇编语言中如何实现字符串操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
软件:emu8086
语言:汇编语言(Assembly)
注意:小编列出了字符串匹配和字符串输入显示的代码,全部代码为小编独自一人编写,会有瑕疵,谨慎使用。
1.字符串匹配设计
1.1设计要求:
要求掌握提示信息的设置及读取键入信息的方法。设计程序,从键盘输入两个字符串进行比较,如相同,则显示"MATCH",否则显示"NO MATCH"。
1.2设计思路:
DOS功能调用输入两个字符串,通过CMPSB指令一个字节一个字节比较字符串,相同输出MATCH,不同输出NO MATCH。
1.3程序清单:
DATA SEGMENT pkey DB 0DH,0AH, 'please input str1 end by enter:','$' qkey DB 0DH,0AH,'please input str2 end by enter:','$' skey DB 0DH,0AH,'MATCH','$' tkey DB 0DH,0AH,'NO MATCH','$' BUFF1 DB 101,0,101 DUP(0) BUFF2 DB 101,0,101 DUP(0)`DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;数据段和堆栈段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 LEA DX,BUFF1 MOV AH,0AH INT 21H ;输入第一个字符串到BUFF1缓冲区 LEA DX,qkey MOV AH,9 INT 21H LEA DX,BUFF2 MOV AH,0AH INT 21H ;输入第二个字符串到BUFF2缓冲区 LEA SI,BUFF1 ;将第一个字符串给SI LEA DI,BUFF2 ;将第二个字符串给DI MOV CX,53 ;给计数器值 CLD ;清方向标准DF REPZ CMPSB ;一个字节一个字节比较字符串,SI和DI递增 JZ MATCH ;全部字节都相等输出MATCH LEA DX,tkey MOV AH,9 INT 21H ;不等输出NO MATCH JMP START MATCH: LEA DX,skey MOV AH,9 INT 21H ;DOS功能调用,输出MATCH JMP STARTCODE ENDS END START
1.4程序运行结果及分析:
主要是学会CMPSB指令的使用,清零DF标志使DI,SI递增,然后实现一个字节一个字节的比较。
图7 字符串匹配设计结果
2.字符串输入及显示设计
2.1设计要求:
要求掌握字符和数据的显示方法。设计程序,接收键盘键入字符串,包括字符和数字,并在终端显示。设计要求:有键入和结束提示信息,如在键入字符串之前提示:INPUT STRING,THE END FLAG IS $。要求统计键入字符串中数字(0-9)的个数和字符的个数,分行显示。
2.2设计思路:
判断在0~9范围内DI累加,判断在a~z和A~Z范围内SI累加,然后将SI和DI即字母个数和数字个数分别转十进制输出。
2.3程序清单:
DATA SEGMENT pkey DB 0dh,0ah,"input string,the end flag is $" skey DB 0dh,0ah,'abc length is:','$' tkey DB 0dh,0ah,'num length is:','$' DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;数据段堆栈段初始化 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 MOV DX,'$' MOV AH,2 INT 21H ;DOS功能调用,输出$ MOV DX,3AH MOV AH,2 INT 21H ;DOS功能调用,输出: MOV DX,0DH MOV AH,2 INT 21H ;DOS功能调用,归位 MOV DX,0AH MOV AH,2 INT 21H ;DOS功能调用,换行 MOV SI,0 MOV DI,0 ;清零,SI存放字母个数,DI存放数字个数 INPUT: MOV AH,1 INT 21H CMP AL,'$' JZ INEND CMP AL,'z' JA INPUT CMP AL,'a' JAE ABC1 ;输入为a~f,SI加1 CMP AL,'Z' JA INPUT CMP AL,'A' JAE ABC1 ;输入为A~F,SI也加1 CMP AL,'9' JA INPUT CMP AL,'0' JAE NUM1 ;输入为0~9,DI加1 JMP INPUT ABC1: INC SI JMP INPUT NUM1: INC DI JMP INPUT INEND: MOV BX,0 MOV CX,10 MOV AX,SI ;将字母个数给AX(十六进制转十进制) LP1: MOV DX,0 DIV CX ;AX表示的32位数除以10,商放在AX,余数放在DX PUSH DX ;将余数压入栈 INC BX CMP AX,0 ;商不为0就继续除10 JNZ LP1 LEA DX,skey MOV AH,9 INT 21H ;DOS功能调用,输出字符串LLP1: POP DX ;DX中数据依次出栈并显示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能调用,输出字母个数 DEC BX JNZ LLP1 MOV BX,0 MOV AX,DI ;将数字个数给AX(十六进制转十进制) LP2: MOV DX,0 DIV CX ;AX表示的32位数除以10,商放在AX,余数放在DX PUSH DX ;将余数压入栈 INC BX CMP AX,0 JNZ LP2 ;商不为0就继续除10 LEA DX,tkey MOV AH,9 INT 21H ;DOS功能调用,输出字符串 LLP2: POP DX ;DX中数据依次出栈并显示 ADD DX,30H MOV AH,2 INT 21H ;DOS功能调用,输出数字个数 DEC BX JNZ LLP2 JMP START CODE ENDS END START
2.4程序运行结果及分析:
当输入字母或数字个数大于10之后统计输出比较麻烦,这里使用了除以10循环并存入堆栈再依次输出的方法实现输出。
图8 字符串输入及显示设计结果
关于汇编语言中如何实现字符串操作就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
字符
字符串
输出
功能
个数
设计
输入
字节
数字
程序
字母
数据
语言
余数
结果
信息
十进制
堆栈
方法
十进
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
教师预防网络安全
网络安全响应技术
4路服务器有哪些
网络安全现有知识
数据库为什么是主流
丰富基础数据库
博电竞软件开发
阿里云轻量应用服务器
江阴标准软件开发怎么样
未转变者怎么重置服务器存档
朝阳区大型软件开发推荐
阿尔宙斯领取沉重球服务器断开
迅雷下载的代理服务器是什么
网络技术中心经营项目
怎么查数据库服务器时间
携程数据库
仁誉互联网科技有限公司招聘
怎么改数据库的字段名
数据库模板管理的主要功能是
考勤软件开发文档
数据库如何进行日志备份
网络安全靠人民蒙古文字
开启数据库服务器视频教程
数据库中数据查询实验报告
集成软件开发免税
朝阳区大型软件开发推荐
数据库地址代码
普陀区网络技术服务产品介绍
如何寻找软件开发技术合伙人
计算机网络技术考研专业