DATAS SEGMENT
MES DB 'Please enter the Source but the size of it should less 100',0AH,0DH,'$'
MES2 DB 0AH,0DH,'$'
Source DB 64H
DB ?
DB 64H DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
restart:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET MES ;提示信息输入源数据
MOV AH,09H
INT 21H
MOV DX, SEG Source
MOV DS, DX
MOV DX, OFFSET Source ;输入一个字符串放到变量SD中
MOV AH, 0AH
INT 21H
MOV DX,OFFSET MES2 ;回车换行
MOV AH,09H
INT 21H
SUB CH,CH ;将字符串的实际长度存于DX中
MOV CL,Source+1
MOV SI,OFFSET Source+2
CALL SHOWSTRING
MOV AX,4C00H ;返回DOS
INT 21H
SHOWSTRING PROC
Again: PUSH CX
PUSH SI
CLD
LODSB
AND AL,0F0H ;取 高4位
MOV CL,04h
SHR AL,CL
CMP AL,0AH ;是否是A以上的数
JB C2
ADD AL, 07H
C2: ADD AL, 30H
MOV DL, AL ;显示字符的高四位十六进制形式
MOV AH, 02H
INT 21H
;POP CX
POP SI
LODSB
AND AL, 0FH ;取低4位
CMP AL, 0AH
JB C3
ADD AL, 07H
C3: ADD AL, 30H
MOV DL, AL ;显示字符低四位的十六进制形式
MOV AH, 02H
INT 21H
POP CX
LOOP Again
RET
SHOWSTRING ENDP
CODES ENDS
END START