汇编字符串比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从键盘分别输入两个字符串(不必等长),然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MA TCH”。
CRLF MACRO
MOV AH,2
MOV DL,0DH
INT 21H
MOV AH,2
MOV DL,0AH
INT 21H
ENDM
S_SHOW MACRO STRING
MOV AH,9
MOV DX,OFFSET STRING
INT 21H
ENDM
S_IN MACRO BUFF
MOV AH,10
MOV DX,OFFSET BUFF
INT 21H
ENDM
DA TA SEGMENT
MESS1 DB 'MATCH',0DH,0AH,'$'
MESS2 DB 'NO MATCH',0DH,0AH,'$'
MESS3 DB 'INPUT STRING1:',0DH,0AH,'$'
MESS4 DB 'INPUT STRING2:',0DH,0AH,'$'
STR1 DB 100,?,100 DUP(0)
STR2 DB 100,?,100 DUP(0)
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
S_SHOW MESS3
S_IN STR1
CRLF
S_SHOW MESS4
S_IN STR2
CRLF
MOV CL,STR1+1
MOV SI,OFFSET STR1+2
AGAIN: MOV AL,[SI]
MOV CH, STR2+1
MOV DI,OFFSET STR2+2
NEXT: CMP AL,[DI]
JE MA TCH
INC DI
DEC CH
JNZ NEXT
INC SI
DEC CL
JNZ AGAIN
S_SHOW MESS2
JMP EXIT
MATCH: S_SHOW MESS1
EXIT:
MOV AH,01H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
从键盘上输入4位十六进制数,将其转换为16位二进制数并在显示器上显示出来。要求输入的数字字符串以回车键结束。如果输入的数字超过4个,则以最后输入的4个为准。若按下的键不是十六进制数字字符,则显示出错信息。
C_SHOW MACRO CHAR MOV AH,2
MOV DL,CHAR INT 21H
ENDM
S_SHOW MACRO STRING MOV AH,9
MOV DX,OFFSET STRING INT 21H
ENDM
S_IN MACRO BUFF
MOV AH,10
MOV DX,OFFSET BUFF
INT 21H
ENDM
DA TA SEGMENT
MESS1 DB 'Please input a hex number:',0AH,0DH,'$'
MESS2 DB 'Error!',0AH,0DH,'$'
INBUF DB 50,?,50 DUP(0)
FLAG DB 0 ;错误标志
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
S_SHOW MESS1
S_IN INBUF
C_SHOW 0DH
C_SHOW 0AH
CALL GETNUM
CMP FLAG,1
JE ERROR
CALL NUMSHOW
JMP EXIT
ERROR: S_SHOW MESS2
EXIT: MOV AH,4CH
INT 21H
GETNUM PROC
MOV SI,OFFSET INBUF+2
MOV AH,0
MOV AL,INBUF+1
ADD SI,AX
SUB SI,4
MOV CX,4
MOV BX,0
NEXT: MOV AL,[SI]
CMP AL,'0'
JB FLAG1
CMP AL,'9'
JA NO_0_9
SUB AL,30H
JMP NEXT1
NO_0_9: CMP AL,'A'
JB FLAG1
CMP AL,'F'
JNA IS_A_F
CMP AL,'a'
JB FLAG1
CMP AL,'f'
JA FLAG1
SUB AL,57H
JMP NEXT1
IS_A_F: SUB AL,37H
NEXT1: PUSH CX
MOV CL,4
SHL BX,CL
ADD BL,AL
INC SI
POP CX
LOOP NEXT
RET
FLAG1: MOV FLAG,1
RET
GETNUM ENDP
NUMSHOW PROC
MOV CX,16
SNEXT: SHL BX,1
JNC S_0
C_SHOW '1'
JMP SNEXT1
S_0: C_SHOW '0'
SNEXT1: LOOP SNEXT
C_SHOW 'B'
RET
NUMSHOW ENDP
CODE ENDS
END START
从键盘上输入的十六进制数字字符进入计算机后并不是相应的十六进制数或二进制数,而是与字符对应的ASCII码,现要找出ASCII码与该数字对应的二进制数之间的关系。关系如下:
十六进制数字字符字符对应的ASCII码数字对应的二进制数
0 ~9 30H ~39H ASCII码- 30H
A ~F 41H ~46H ASCII码- 37H
a ~f 61H ~66H ASCII码- 57H