首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

汇编输出了乱码~解决办法

2012-03-18 
汇编输出了乱码~??要求将ASCII码表示的十六进制数转成十进制并输出。我的代码如下可是运行后发现,输出的是

汇编输出了乱码~??
要求将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

热点排行