📄 dstr002.asm
字号:
;************************************************************************
;* MODULE INFORMATION*
;**********************
;* FILE NAME: dstr002.asm
;* SYSTEM NAME: devlib
;* ORIGINAL AUTHOR(S): Paul Lemmers
;* VERSION NUMBER:
;* CREATION DATE: 1990/8/14
;*
;* DESCRIPTION: Contains dev_strcmp
;*
;************************************************************************
;* CHANGES INFORMATION **
;************************
;* REVISION: $Revision: 1.1 $
;* WORKFILE: $Workfile: dstr002.asm $
;* LOGINFO: $Log: D:/CPROG/MYDEV/DEVLIB/VCS/DSTR002.ASV $
;*
;* Rev 1.1 17 Dec 1990 14:35:08 PAUL
;* os2def.h changes
;*
;* Rev 1.0 14 Aug 1990 14:40:38 PAUL
;* Initial revision.
;************************************************************************/
;
INCLUDE cdev.inc
_TEXT SEGMENT
;************************************************************************
;* NAME: dev_strcmp
;* SYNOPSIS: int dev_strcmp(char far *p1, char far *p2);
;* char far *p1
;* char far *p2
;* DESCRIPTION: see C-runtime strcmp
;* UNMODIFIED REGISTERS:
;* ds bp si di
;* RETURNS: see C-runtime strcmp
;* TIMING:
;* This implementation (scasb ; cmpsb) is O( 17*N ),
;* an implementation with two load and two compare instructions
;* is O( 24*N ). Where N is the (second) string length.
;************************************************************************
PUBLIC _dev_strcmp
p1 = 4
p2 = 8
_dev_strcmp PROC NEAR
push bp
mov bp,sp
push ds
push di
push si
lds si,[bp+p1]
les di,[bp+p2] ; get ptr to string
mov cx,0FFFFh
xor ax,ax ; search for '\0'
repne scasb
not cx ; cx := # nonzero+1
sub di,cx ; restore di
repe cmpsb
jz $L001 ; jump if cx times done
sbb ax,ax ; a: (CY) -> (0FFFFh and CY)
; b: (NC) -> (0 and NC)
sbb ax,0FFFFh ; a: ax := 0FFFFh
; b: ax := 1
$L001: pop si
pop di
pop ds
pop bp
ret
_dev_strcmp ENDP
_TEXT ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -