DATA SEGMENT
MD DW ?
C10 DW 10
AIM DW ?
TIMES DW ?
LETTER DB '0123456789ABCDEF'
BUFFER DB 80,?,80 DUP(?)
BUFFER1 DB 80,?,80 DUP(?)
MESS DB 0DH,0AH,'PLEASE INPUT A INTEGER ',0DH,0AH,'$'
MESS1 DB 0DH,0AH,'A DECIMAL DISPLAY OF THE INPUT NUMBER ',0DH,0AH,'$'
MESS2 DB 0DH,0AH,'PLEASE INPUT THE HEX YU WANT TO TRANSFORM TO ',0DH,0AH,'$'
MESS3 DB 0DH,0AH,'THE WANTED HEX IS ',0DH,0AH,'$'
MESS4 DB 0DH,0AH,'CONVERTED NUMBER ',0DH,0AH,'$'
MESS5 DB 0DH,0AH,'WRONG PLACE',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,MESS
MOV AH,09H
INT 21H
LEA DX,BUFFER
MOV AH,0AH
INT 21H
MOV BL,BUFFER+1
MOV BH,0
ADD BL,2
MOV BUFFER[BX],'$'
LEA DX,MESS1
MOV AH,09H
INT 21H
MOV AH,09H
LEA DX,BUFFER
ADD DX,2
INT 21H
LEA DX,MESS2
MOV AH,09H
INT 21H
LEA DX,BUFFER1
MOV AH,0AH
INT 21H
MOV BH,0
MOV BL,BUFFER1[1]
ADD BL,2
MOV BUFFER1[BX],'$'
LEA DX,MESS3
MOV AH,09H
INT 21H
MOV AH,09H
LEA DX,BUFFER1[2]
INT 21H
MOV CL,BUFFER1[1] ;GET THE NUMBER OF THE WANTED HEX 1
MOV CH,0
LEA SI,BUFFER1[2]
MOV AX,0
ONE:MUL C10
MOV BL,[SI]
SUB BL,'0'
MOV BH,0
ADD AX,BX
INC SI
LOOP ONE ;END THE COURSE OF GETTING HEX
MOV MD,AX ;MOVE HEX TO AX
MOV CL,BUFFER[1] ;GET THE NUMBER OF AIM NUMBER
MOV CH,0
LEA SI,BUFFER[2]
MOV AX,0
TWO:MUL C10
MOV BL,[SI]
SUB BL,'0'
MOV BH,0
ADD AX,BX
INC SI
LOOP TWO
MOV AIM,AX ;MOV IT TO AIM
MOV TIMES,0
CMP MD,2
JZ T2
MOV AX,AIM
T1:MOV DX,0 ;这句话一定不能少!!!如果是0除以进制单位,按照我们的想法余数0应该放在DX里,但实际上DX的数值不变,会出现想不到的错误
DIV MD
PUSH DX
INC TIMES
CMP AX,0
JZ END1
JMP T1
T2:MOV CX,10H
MOV AX,AIM
T3:DIV MD
PUSH DX
INC TIMES
LOOP T3
END1:LEA DX,MESS4
MOV AH,09H
INT 21H
LEA BX,LETTER
MOV CX,TIMES
OUT0:POP AX
MOV AH,0
XLAT
MOV DL,AL
MOV AH,02H
INT 21H
LOOP OUT0
MOV AX,4C00H
INT 21H
CODE ENDS
END START
坑点就一个,就是取余之前将余数存放的地方改成0,防止0除之后出现错误,这个地方我找了五个多小时没找出来,都是泪啊