汇编中的REPZ CMPSB

REPZ CMPSB 指令用于比较内存中两个字节是否相等,如果相等则继续比较。内容涉及CMPSB的基本操作,ZF标志的作用,以及与REPE/REPZ的区别。通过示例和DEBUG工具的使用,解释如何在实际操作中运用这些指令。
摘要由CSDN通过智能技术生成

repz cmpsb 如果ds:si和es:di所指向的两个字节相等,则继续比较。

CMPSB指令,是用 DS:[SI] 所指的字节单元内容,减去 ES:[DI] 所指的字节单元的内容。
DS:[SI] 是被减数, ES:[DI] 是减数。
验证方法很简单,将这两个内存单元的内容设置成不同的数,看指令执行后CF是0还是1,就能证明了。
例如,你将DS:[SI]单元内容设成01H,将ES:[DI]单元内容设成02H,然后执行CMPSB,你会发现,CF是1,而不是0。这就证明了是前者减去后者的运算。

ZF=1表示是0,对吗?ZF=0,结果非0
是的,ZF=1,表明运算结果为0

cmpsb和rep cmpsb的区别?他们的执行过程是怎样的?
答:
repe/repz:相等则重复
32位:
rep string_op (串操作指令)
string_op : ins, movs,outs,stos
rep:一个串操作前缀,它使其后的串操作重复执行ecx次。
操作:
while (ecx!=0)
{
ecx=ecx-1;
string_op; /串操作/
}
;========================
repe/repz string_op
string_op:cmps,scas
repz:串操作前缀&#

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来帮你修改代码,将字符串比较改为输出或补齐字符串的操作。以下是修改后的代码示例: ``` TITLE 字符串比较 DATA SEGMENT STR1 DB 'STRING1$' STR2 DB 'STRING2$' TIP1 DB 'MATCH$' TIP2 DB 'NOT MATCH$' TIP3 DB 'DISPLAY TIP1$' TIP4 DB 'DISPLAY TIP2$' TIP5 DB 'PRESS ENTER TO EXIT$' DATA ENDS CODE SEGMENT START: MOV AX, DATA MOV DS, AX ; 获取字符串长度 MOV CX, 0 MOV SI, OFFSET STR1 MOV AL, [SI] CMP AL, '$' JE COMPARE INC CX INC SI JMP SHORT $+2 COMPARE: MOV DI, OFFSET STR2 MOV AL, [DI] CMP AL, '$' JE COMPARE_END INC DI INC CX CMP CX, 8 JE COMPARE_END JMP SHORT COMPARE COMPARE_END: ; 判断字符串长度并补齐 CMP CX, 8 JAE OUTPUT MOV DX, OFFSET STR2 ADD DX, CX MOV AL, 'X' CMP CX, 0 JE FILL JMP SHORT $+2 FILL: MOV [DX], AL INC CX INC DX CMP CX, 8 JE OUTPUT JMP SHORT FILL OUTPUT: ; 输出字符串1或字符串2 MOV DX, OFFSET STR1 CMP CX, 8 JB OUTPUT_2 OUTPUT_1: MOV AL, [DX] CMP AL, '$' JE MATCH MOV AH, 2 MOV DL, AL INT 21H INC DX DEC CX JMP OUTPUT_1 OUTPUT_2: MOV DX, OFFSET STR2 OUTPUT_21: MOV AL, [DX] CMP AL, '$' JE EXIT MOV AH, 2 MOV DL, AL INT 21H INC DX DEC CX JMP OUTPUT_21 ; 比较字符串 MATCH: LEA DX, TIP1 MOV AH, 9 INT 21H JMP EXIT ; 不匹配 NOT_MATCH: LEA DX, TIP2 MOV AH, 9 INT 21H JMP EXIT ; 退出程序 EXIT: LEA DX, TIP5 MOV AH, 9 INT 21H MOV AH, 1 INT 21H CMP AL, 13 JZ AA JMP START AA: MOV AH, 4CH INT 21H CODE ENDS END START ``` 这段代码,我们首先获取了字符串1和字符串2的长度,并判断了字符串2的长度是否大于等于字符串1的长度。如果是,则直接输出字符串1或字符串2;否则,我们用字符串2补齐到和字符串1一样的长度,并输出它们。最后,我们将比较字符串和输出结果的部分删除,因为这部分已经不需要了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值