Bootstrap

汇编程序的CMPSB CMPSW CMPSD的使用

;**********************************************************
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的情况下从第一操作减去第二操作数,如果不相等的话,则停止循环

;