汇编输出了乱码~??
要求将ASCII码表示的十六进制数转成十进制并输出。
我的代码如下
可是运行后发现,输出的是乱码加我所要的答案
百思不得其解,那位大侠帮忙看一下~~
谢谢
DATA SEGMENT
DATA1 DB '124F ' ;四位十六进制ASCII
DATA2 DB4 DUP(?);四位十六进制数
DATA3 DB 5 DUP(0), '$ '
TEMP1 DB 5 DUP(0);
TEMP2 DW?
DATA ENDS
STACKS SEGMENT
DW1000 DUP(?)
STACKS ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACKS
START: MOV AX,DATA
MOV DS,AX
MOV SI,3 ;
MOV CX,4
A_TO_H: XOR AH,AH
MOV AL,DATA1[SI];装入待转换十六进制ASCII
CBW
PUSHAX
CALLTRANS_
POPAX
MOVDATA2[SI],AL;保存转成的十六进制数
DECSI
LOOPA_TO_H
MOVAL,DATA2+3
MOVAH,DATA2+1
MOVBL,DATA2+2
MOVBH,DATA2
MOVCL,4
SHLBX,CL
ADDAX,BX
MOVTEMP2,AX
MOV SI,4 ;
MOV CX,4
XOR AH,AH
H_TO_D:
MOV AX,TEMP2
CWD
MOV BX,10
DIV BX
MOV TEMP1[SI],DL;余数DX存TEMP
MOV TEMP2,AX
DEC SI
; JNZLOOPER
LOOPH_TO_D
MOV TEMP1,AL
MOV SI,4 ;
MOV CX,5
XOR AH,AH
D_TO_A:MOVDL,TEMP1[SI]
ADDDL,30H
MOVDATA3[SI],DL
DECSI
LOOPD_TO_A
MOVAH,DATA3
MOVAL,DATA3+1
MOVBH,DATA3+2
MOVBL,DATA3+3
MOVDX,OFFSET DATA3
MOVAX,09H
INT21H
MOV AX,4C00H ;
INT 21H
RET
MAINENDP
TRANS_ PROC NEAR;TRANS_将ASCII码转成十六进制数
PUSHF
PUSHAX
PUSHBX
PUSHCX
PUSHBP
MOVBP,SP
MOVAX,[BP+12]
XORAH,AH
CMPAL, ': '
JBNEXT_T
SUBAL,07H
NEXT_T: SUBAL,30H
MOV[BP+12],AX
POPBP
POPCX
POPBX
POPAX
POPF
RET
TRANS_ENDP
CODE ENDS
END START
[解决办法]
....
; MOV AH,DATA3 ; 这几条指令没用必要吧
; MOV AL,DATA3+1
; MOV BH,DATA3+2
; MOV BL,DATA3+3
MOV DX,OFFSET DATA3
MOV AX,09H ; 这个应该是 mov ah, 9
INT 21H
MOV AX,4C00H ;
INT 21H
RET
MAIN ENDP