汇编字符串比较

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档