请教一下字符串比较函数CMPSB的用法

triace_zhang 2006-09-07 04:25:46
我编了一个简单的比较字符串函数的程序,结果放在RESULT内存单元里,使用的是CMPSB函数,
为了测试,用的是两个完全相同的串,但是结果就是不对:

DATA SEGMENT
STR1 DB 'ABCD' ;STR1和STR2XIANG相同,结果应该是'Y'
COUNT DB $ - STR1 ;字符串个数
STR2 DB 'ABCD'
RESULT DB ?
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP (0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET STR1
MOV SI,OFFSET STR2
MOV CH,0
MOV CL,COUNT ;放入循环次数
CLD
LOP: CMPSB ;如果使用CMPSB函数,结果显示是'N'
;MOV DL,[DI] ;如果不用CMPSB而用下面几条语句,结果是正确的'Y'
;CMP DL,[SI]
;PUSHF
;INC DI
;INC SI
;POPF
JNZ NOTEQU
LOOP LOP
MOV RESULT,'Y'
JMP END0
NOTEQU: MOV RESULT,'N'
END0: MOV DL,RESULT
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
COSEG ENDS
END START

因为我看的书是8086/8088宏汇编语言,比较旧。我用的是MASM6.11,32位的迅驰处理器,个人觉得CMPSB在我的这个程序里可以用

MOV DL,[DI]
CMP DL,[SI]
PUSHF
INC DI
INC SI
POPF

来代替,请教一下程序的问题是硬件问题还是我使用CMPSB的方法不对?
...全文
1517 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
triace_zhang 2006-09-07
  • 打赏
  • 举报
回复
没有认真看书,明白了。
triace_zhang 2006-09-07
  • 打赏
  • 举报
回复
用了二楼的方法就对了,请教一下为什么要设置 ES 指向 DATA 段呢?
zara 2006-09-07
  • 打赏
  • 举报
回复
没有设置 ES 指向 DATA 段吧:
START: MOV AX,DATA
MOV DS,AX
mov es, ax ;* 加上这一指令试试
...

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧