【汇编语言】字符串比较
已定义两个字符串stra、strb(以‘$’为结束符),编写一个字符串比较的子程序, stra>strb返回1,stra=strb返回0,str<strb返回-1。
设计一个字符串比较程序(同于c语言中的strcmp()函数)
完整代码
;This is the structure of a main module using complete segment directives
DATA SEGMENT
;......Place data declarations here
STR1 DB 'abce$'
STR2 DB 'b$'
G DB '1$'
E DB '0$'
L DB '-1$'
;......
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
STRCMP PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV SI, 0H
MOV DI, 0H
MOV BH, STR1[SI]
MOV BL, STR2[DI]
MOV CX, 0
MOV CL, 01H
.WHILE BH != '$' && BL != '$' ; 一个字节一个字节进行判断
SUB BH, BL
MOV AL, BH
.IF SIGN? && AL > 0 ;判断相减后 标志位是否为负数 若为负数 则小于
MOV CL, 01H
LEA DX, L
MOV AH, 09H
INT 21H
.BREAK
.ELSEIF AL == 0
MOV CX, 0
INC SI
INC DI
MOV BH, STR1[SI]
MOV BL, STR2[DI]
.IF BH == '$'
.IF BL == '$'
.CONTINUE
.ELSE
MOV CX, 01H
LEA DX, L
MOV AH, 09H
INT 21H
.ENDIF
.ELSEIF BL == '$'
MOV CX, 01H
LEA DX, G
MOV AH, 09H
INT 21H
.ENDIF
.CONTINUE
.ELSEIF !SIGN? && AL > 0 ; 判断标志位是否为正数 若为正 则大于
MOV CL, 01H
LEA DX, G
MOV AH, 09H
INT 21H
.BREAK
.ENDIF
.ENDW
.IF CL == 0
LEA DX, E
MOV AH, 09H
INT 21H
.ENDIF
POP DX
POP CX
POP BX
POP AX
RET
STRCMP ENDP
START:
MOV AX,DATA
MOV DS,AX
;......Place instructions here
CALL STRCMP
;......
MOV AH,4CH ;exit
INT 21H
CODE ENDS
END START