strnicmp.s

来自「一个操作系统,用C语言实现开发的,我在一个浙江大学的操作系统实验网站找到.大家学」· S 代码 · 共 60 行

S
60
字号
# Kernel Library
# strnicmp

.include "f_asm.inc"

.equ STR1,	DES
.equ STR2,	SRC

.text

.global _strnicmp

_strnicmp:
	ENTER
		pushl %esi
		pushl %edi
		
		movl LEN(%ebp), %ecx
		movl STR1(%ebp), %esi
		movl STR2(%ebp), %edi
		
		xorl %eax, %eax
		cmpl %esi, %edi
		jz done
	
next:
		movb (%esi), %dl
		cmpsb
		jz ignore
		lahf
		movb -1(%edi), %dh
		cmpb $0x41, %dl; jl diff
		cmpb $0x5a, %dl; jg comp0
		addb $0x20, %dl
comp0:	
		cmpb $0x41, %dh; jl diff
		cmpb $0x5a, %dh; jg comp1
		addb $0x20, %dh
comp1:
		cmpb %dl, %dh
		jnz diff
		xorb %ah, %ah
ignore:		
		cmpb $0, %dl
		loopnz next
		jmp done			

diff:		
		xorl %ecx, %ecx
		sahf
		sbbl %ecx, %ecx
		orb $1, %cl
		movl %ecx, %eax
done:
		popl %edi
		popl %esi
				
	LEAVE
		ret

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?