汇编语言字符串比较与查找

答案仅供参考,大家还是自己写比较好。

(汇编语言实现)用字符串处理指令编制程序,处理字符串的比较和查找,显示结果。

要求:

(1)字符串的比较函数中,一个字符串在数据段定义,另一个字符串在程序执行时从键盘输入,必须定义键盘缓冲区。指出不相等的位置。

(2)在字符串中查找某个字符,并指出找到的位置。

第一问:

DATA SEGMENT
    BUFF DB 255 DUP('?');定义一个缓冲区,缓冲区长度比需要比较的字符串长即可,缓冲区的?需要加单引号
DATA ENDS
EXT SEGMENT
    MESS DB 'www.omegaxyz.com$';注意最后一定要加$
EXT ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:EXT
START:
MOV AX,DATA
MOV DS,AX
MOV AX,EXT
MOV ES,AX
;套路

LEA DX,BUFF
MOV AH,0AH
INT 21H
;使用Dos 0AH命令向缓冲区输入字符串

MOV CL,BUFF+1
;注意Dos 0AH命令实际输入的字符数量保存在内存DX+1中(见附录),即BUFF+1,因此把BUFF+1的值给CL
LEA SI,BUFF+2
;需要使用CMPSB命令,从BUFF+2开始是真正输入的值赋值给SI
LEA DI,MESS
;被比较的原始串

CLD
MOV BL,'0'
;为了显示串开始不同的地方,设置BL的初始值,由于显示的是ascii码所代表的值,因此把‘0’赋值给BL

XY:INC BL
   CMPSB
LOOPZ XY
;循环一次BL+1

JZ YES
MOV DL,BL
JMP xxxxxxxxxx
YES:MOV DL,'Y'
xxxxxxxxxx:MOV AH,2
    INT 21H
;显示

MOV AH,4CH
INT 21H
CODE ENDS
END START

第二问:

EXT SEGMENT
    MESS DB 'www.omegaxyz.com$'
EXT ENDS
;注意要使用SCASB命令必须将数据保存在ESCODE SEGMENT
ASSUME CS:CODE,ES:EXT
START:
MOV AX,EXT
MOV ES,AX

MOV AH,01H
INT 21H
;调用Dos 01H命令,从键盘中输入1个字符并保存在ALMOV CX,17
LEA DI,MESS

CLD
MOV BL,'0'
;为了寻找所求字符位置,设置一个寄存器用来保存
XY:INC BL
   SCASB
LOOPNZ XY
;LOOPNZ CX不等于0ZF=0即不相等时循环

JZ YES
MOV DL,'N'
;N说明没有查找到

JMP DISP
YES:MOV DL,BL
DISP:MOV AH,2
    INT 21H

MOV AH,4CH
INT 21H
CODE ENDS
END START

结果截图请访问我的网站:omegaxyz.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值