汇编语言:设数据区有两个字节串,串1的长度为5,串2的长度为10。编程: 若串2的最后5个字符和串1相同,则置FLAG单元为“Y”,否则置为“N”。串比较指令完成

设数据区有两个字节串,串1的长度为5,串2的长度为10。编程: 若串2的最后5个字符和串1相同,则置FLAG单元为“Y”,否则置为“N”。(要求用串比较指令完成

DATAS SEGMENT
    ;此处输入数据段代码  
    BUF1 DB 'ABCDE$'
    BUF2 DB '12345ABCDE$'
    BUF3 DB 'FLAG=$'
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    MOV ES,AX;附加段与数据段为同一段
    
    MOV BX,5
    
    LEA SI,BUF1;源串首地址
    LEA DI,BUF2[BX];目的串首地址
    CLD;
    
    MOV AH,9
    LEA DX,BUF3;输出FLAG=
    INT 21H
    
    MOV CX,5
    REPE CMPSB;串比较
    JZ JL1
    
    MOV AH,2
    MOV DL,'N'
    INT 21H
    JMP EXIT
    
JL1:
	MOV AH,2
	MOV DL,'Y'
	INT 21H
	
EXIT:
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

在这里插入图片描述
注意

1.使用串处理时(比如串比较),一定要写
MOV ES,AX;附加段与数据段为同一段

ES附加段寄存器,用于指出存放附加数据的附加段的段地址

2.CLD指令功能:
将标志寄存器Flag的方向标志位DF清零。
在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。

3.串比较(影响标志位)
格式:CMPS DST,SRC
CMPSB
CMPSW

4、CMPS(Compare String):串比较 CMPS指令的语法格式为:
CMPSB
CMPSW
CMPSD 功能: DS:[SI] - ES:[DI]; if(DF=0) then
SI=SI+size;
DI=DI+size; else
SI=SI-size;
DI=DI-size;

CMPSB\CMPSW\CMPSD将DS:SI所指源串的一个字节、字、双字与ES:DI所指目的串的一个字节、字、双字进行比较,根据比较结果设置标志位。然后,若DF=0,则SI和DI增加1,2,4。否则SI和DI减少1,2,4。

对标志位的影响:有,同CMP

因此 CMPSB:字节串比较
DS:[SI] - ES:[DI]
SI<-SI+(-)1,DI<-DI+(-)1 CMPSW:字串比较
DS:[SI] - ES:[DI]
SI<-SI+(-)2,DI<-DI+(-)2

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个叶绿体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值