文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

汇编语言中如何实现字符串操作

2023-06-21 20:46

关注

这篇文章将为大家详细讲解有关汇编语言中如何实现字符串操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

软件: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 字符串输入及显示设计结果

关于汇编语言中如何实现字符串操作就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯