如何在程序集中的控制台中显示Decimal值而不是ascii

时间:2013-08-01 12:46:25

标签: assembly x86 ascii

我对装配很新,我在显示小数值方面遇到了问题。

我有这段代码:

mov ah,09h
mov al,[0fcbh]
mov bh,0
mov bl,0fh
mov cx,0001h
int 10h

我分配到内存位置0fcbh = 55的数据。我想显示"U"本身而不是55,而不是将其显示到ascii(相当于55"U"的字符)。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

.MODEL SMALL
.STACK 100H
.DATA

MSG1 DB 13,10,"ENTER 1ST NUMBER : $"
MSG2 DB 13,10,"ENTER 2ND NUMBER $"
ADDI DB 13,10,"PRESS 1 FOR ADDITION  $" 

SUBS DB 13,10,"PRESS 2 FOR SUBSTRACTION ? $"
MULT DB 13,10,"PRESS 3 FOR MULTIPLICATION ? $"
DIVI DB 13,10,"PRESS 4 FOR DIVISION ? $"
INVALID DB 13,10,"INVALID NUMBER  $"  
AG   DB 13,10,"WANT TO CALCULATE AGAIN ?? IF YES PRESS Y ELSE  N $" 
PROCESS DB '?'
.CODE



MAIN PROC

    MOV AX,@DATA
    MOV DS,AX 
    AGAIN:          
    MOV AH,2
    MOV DL,13
    INT 21H
    MOV DL,10
    INT 21H

    MOV AH,9
    LEA DX,ADDI
    INT 21H 

    LEA DX,SUBS
    INT 21H

    LEA DX,MULT
    INT 21H

    LEA DX,DIVI
    INT 21H

    MOV AH,1
    INT 21H
    MOV PROCESS,AL

    CMP PROCESS,'1'
    JE ADDITION    

    CMP PROCESS,'2'
    JE SUBSTRACTION 

    CMP PROCESS,'3'
    JE MULTIPLY  

    CMP PROCESS,'4'
    JE DIVISION 

    JNE EXIT 


    ADDITION:
    MOV AH,9

    LEA DX,MSG1
    INT 21H 
    XOR BX,BX
    MOV AH,1
    INT 21H  



    @INPUT:

    CMP AL, 0DH
    JE NEXTNUM
    CMP AL, 30H                 
    JL @ERROR                    

    CMP AL, 39H                 
    JG @ERROR                    

    AND AX, 000FH               

    PUSH AX                      

    MOV AX, 10                   
    MUL BX             
    MOV BX, AX             
    POP AX                   
    ADD BX, AX             
    MOV AH, 1               
    INT 21H
    CMP AL,13
    JE NEXTNUM                          
    JNE @INPUT                   

    @ERROR:
    MOV AH,9
    LEA DX,INVALID
    JMP EXIT

    NEXTNUM:
    MOV AH,9

    LEA DX,MSG2
    INT 21H 
    XOR CX,CX
    XOR AX,AX
    MOV AH,1
    INT 21H 

    INP:                                       
    AND AX,15              
    PUSH AX                      
    MOV AX, 10                
    MUL CX                    
    MOV CX, AX                 
    POP AX                      
    ADD CX, AX  
    MOV AH, 1                  
    INT 21H
    CMP AL,13
    JE PR                                
    JNE INP 


    PR:
    CMP PROCESS,'1'
    JE OUTSUM

    CMP PROCESS,'2'
    JE OUTSUB

    CMP PROCESS,'3'
    JE OUTMUL

    CMP PROCESS,'4'
    JE OUTDIV


    OUTSUM:   
    ADD BX,CX
    JMP EXIT

    OUTSUB:
    SUB BX,CX
    JMP EXIT

    OUTMUL:  
    MOV AX,CX
    MUL BX   
    MOV BX,AX    
    JMP EXIT

    OUTDIV:

    MOV AX,BX
    DIV CX 
    MOV BX,AX
    JMP EXIT















    SUBSTRACTION:
    MOV AH,9

    LEA DX,MSG1
    INT 21H 
    XOR BX,BX
    MOV AH,1
    INT 21H

    JMP @INPUT







    MULTIPLY:

    MOV AH,9

    LEA DX,MSG1
    INT 21H 
    XOR BX,BX
    MOV AH,1
    INT 21H

    JMP @INPUT





    DIVISION:

    MOV AH,9

    LEA DX,MSG1
    INT 21H 
    XOR BX,BX
    MOV AH,1
    INT 21H

    JMP @INPUT



    EXIT:
    MOV AH,9
    LEA DX,AG
    INT 21H
    MOV AH,1
    INT 21H
    CMP AL,'Y'
    JE AGAIN  

    MOV AH,4CH
    INT 21H

    MAIN ENDP
END MAIN