;**********************************************************
TITLE CMPSB CMPSW CMPSD
;**********************************************************
;**********************************************************
;程序运行平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;**********************************************************
;**********************************************************
;文件包含
INCLUDE Irvine32.inc
;**********************************************************
;**********************************************************
;数据段定义
.DATA
strbS byte "This is byte source string",0;s的ascii是115
strbD byte "This is byte Destiantion string",0;D的ascii是68
strwS word 12,145,15,45,15,45,0
strwD word 125,15,451,25,1515,2,0
strdS dword 14,15,151,515,450,0
strdD dword 1,15,12,51,51,215,0
strb1 byte "strbS比较大",0dh,0ah,0
strb2 byte "strbD比较大",0dh,0ah,0
strw1 byte "strwS比较大",0dh,0ah,0
strw2 byte "strwD比较大",0dh,0ah,0
strd1 byte "strdS比较大",0dh,0ah,0
strd2 byte "strdD比较大",0dh,0ah,0
;**********************************************************
;**********************************************************
;代码段定义
.CODE
main proc
;cmpsb
mov esi,offset strbS
mov edi,offset strbD
mov ecx,sizeof strbS
cld
repe cmpsb
ja BLarger;
mov edx,offset strb2
call WriteString
jmp TESTCMPSW
BLarger:
mov edx,offset strb1
call WriteString
TESTCMPSW:
mov esi,offset strwS
mov edi,offset strwD
mov ecx,(sizeof strwS)/2
cld
repe cmpsw
ja WLarger
mov edx,offset strw2
call WriteString
jmp TESTCMPSD
WLarger:
mov edx,offset strw1
call WriteString
TESTCMPSD:
mov esi,offset strdS
mov edi,offset strdD
mov ecx,(sizeof strdS)/4
cld
repe cmpsd
ja DLarger
mov edx,offset strd2
call WriteString
DLarger:
mov edx,offset strd1
call WriteString
exit
main endp
end main
;**********************************************************
PS:这里面和MOVSB MOVSW MOVSD使用是一样的,但是后者使用了rep,这里使用了repe,
暂时只看到了 rep适用于 movsb movsw movsd三者
而repe适用于 cmpsb cmpsw cmpsd和后面要说的几项,使用情况不同,或者说根本没什么关系???
PS:PS: cmpsb cmpsw cmpsd和cmp是一样的,都是在ecx!=0的情况下从第一操作减去第二操作数,如果不相等的话,则停止循环