DATAS SEGMENT
MES DB 'Show a string as its hex binary:',0AH,0DH,'$'
MES1 DB 'Please enter a string or a number:',0AH,0DH,'$'
MES2 DB 0AH,0DH,'$'
MES3 DB 'Please choice a kind of operation: r = "restart";other character means = "quit";',0AH,0DH,'$'
SDD DB 64H ;定义要转化的源数据
DB ?
DB 64H DUP(?)
LEN EQU $-SDD ;求字符串实际长度值
STRING DB LEN*8 DUP(30H) ;定义一个中间过渡存储字符串,其长度必须为元数据字节数的8倍
DATAS ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATAS,ES:DATAS
start:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET MES2 ;回车换行
MOV AH,09H
INT 21H
MOV DX,OFFSET MES1 ;显示提示信息输入一个字符串放到变量SD中
MOV AH,09H
INT 21H
MOV DX, SEG SDD
MOV DS, DX ;输入一个字符串放到变量SD中
MOV DX, OFFSET SDD
MOV AH, 0AH
INT 21H
MOV DX,OFFSET MES2 ;回车换行
MOV AH,09H
INT 21H
SUB DH,DH ;将字符串的实际长度存于DX中
MOV DL,SDD+1
MOV AL,31H ;前期准备工作
SUB DH,DH ;将字符串的实际长度存于DX中
MOV DL,SDD+1
INC DX
MOV SI,OFFSET SDD+2
MOV DI,OFFSET STRING
CLD
JMP1: LODSB
DEC DL
JZ OUT1
MOV CX,8
MOV BL,AL
again: RCL BL,1
JNC next ;如果BL的某一位不为零则对应的[DI]=31H
MOV DS:[DI],31H
next: INC DI
LOOP again
JMP JMP1
out1:
MOV DX,OFFSET MES ;提示信息
MOV AH,09H
INT 21H
SUB DH,DH ;将源字符串的实际长度存于DX中
MOV DL,SDD+1
MOV AL,DL ;8倍关系
MOV BL,08H
MUL BL
MOV CX,AX ;CX值对应下面的 LOOP OUT1
LEA SI, STRING
MOV BL,0
OUT2: MOV DL,[SI] ;显示过渡字符串
MOV AH,2
INT 21H
INC SI
INC BL
CMP BL,8
JNZ MM
MOV DL,3BH ;显示分隔符;
MOV AH,2
INT 21H
MOV BL,0
MM: LOOP out2
MOV AX,4C00H
INT 21H
CODE ENDS
END start