An assembly program to accept a decimal number and print it’s 2’s complement binary and hexadecimal – IGNOU MCA Assignment 2013

By | April 15, 2014

MASTER OF COMPUTER APPLICATIONS
Course Code : MCSL-017
Course Title : C and Assembly Language Programming
Assignment Number : MCA(1)/L017/Assign/2013 

 

Write an assembly language program to accept a decimal number and display it’s two’s complement representation in binary and hexadecimal formats

 

DATA SEGMENT
    DIGIT1 DB ?
    DIGIT2 DB ?
    HEXNUM DB ?
    HEXADEC DB 3 DUP (‘$’)
    TWOSCOMP DB 10 DUP (‘$’)
    MSG1 DB “ENTER NUMBER : $”
    MSG2 DB 10,13,”HEXADECIMAL FORM IS : $”
    MSG3 DB 10,13,”TWO’S COMPLEMENT FORM IS : $”
DATA ENDS

CODE SEGMENT
        ASSUME DS:DATA,CS:CODE
START:       
    MOV AX,DATA
    MOV DS,AX
   
    LEA DX,MSG1
    MOV AH,9
    INT 21H
   
    MOV AH,1
    INT 21H
    SUB AL,30H
    MOV DIGIT1,AL
   
    MOV AH,1
    INT 21H
    SUB AL,30H
    MOV DIGIT2,AL
   
    MOV AH,0
    MOV AL,DIGIT1
   
    MOV CL,10
    MUL CL
   
    ADD AL,DIGIT2
    MOV HEXNUM,AL
   
    NOT AL
    ADD AL,1

    LEA SI,TWOSCOMP
    CALL HEX2BIN
   
    MOV AL,HEXNUM
    MOV BL,AL
    AND AL,0F0H
    AND BL,0FH
     
    MOV CL,04H
    ROL AL,CL
     
    LEA DI,HEXADEC
    MOV [DI],AL
    MOV [DI+1],BL
   
       LEA SI,HEXADEC        
       MOV CL,2
       MOV CH,0       
CHECK:
       CMP [SI],9
       JG ALPHA
   
NUM:   ADD [SI],30H
       JMP DONE
      
ALPHA: ADD [SI],37H 
            
DONE:       
       INC SI
       LOOP CHECK
   
      
    LEA DX,MSG2
    MOV AH,9
    INT 21H
      
    LEA DX,HEXADEC
    MOV AH,9
    INT 21H
   
    LEA DX,MSG3
    MOV AH,9
    INT 21H
      
    LEA DX,TWOSCOMP
    MOV AH,9
    INT 21H
            
    MOV AH,4CH
    INT 21H        
CODE ENDS  

HEX2BIN PROC NEAR
    MOV CX,0
    MOV BX,2
   
LOOP1: MOV DX,0
       DIV BX
       ADD DL,30H
       PUSH DX
       INC CX
       CMP AX,1
       JG LOOP1
     
       ADD AL,30H
       MOV [SI],AL
     
LOOP2: POP AX
       INC SI
       MOV [SI],AL
       LOOP LOOP2
       RET
HEX2BIN ENDP           
   
END START

 

program code :

[codesyntax lang=”asm” lines=”normal”]

DATA SEGMENT
    DIGIT1 DB ?
    DIGIT2 DB ?
    HEXNUM DB ?
    HEXADEC DB 3 DUP (‘$’)
    TWOSCOMP DB 10 DUP (‘$’)
    MSG1 DB “ENTER NUMBER : $”
    MSG2 DB 10,13,”HEXADECIMAL FORM IS : $”
    MSG3 DB 10,13,”TWO’S COMPLEMENT FORM IS : $”
DATA ENDS

CODE SEGMENT
        ASSUME DS:DATA,CS:CODE
START:       
    MOV AX,DATA
    MOV DS,AX
   
    LEA DX,MSG1
    MOV AH,9
    INT 21H
   
    MOV AH,1
    INT 21H
    SUB AL,30H
    MOV DIGIT1,AL
   
    MOV AH,1
    INT 21H
    SUB AL,30H
    MOV DIGIT2,AL
   
    MOV AH,0
    MOV AL,DIGIT1
   
    MOV CL,10
    MUL CL
   
    ADD AL,DIGIT2
    MOV HEXNUM,AL
   
    NOT AL
    ADD AL,1

    LEA SI,TWOSCOMP
    CALL HEX2BIN
   
    MOV AL,HEXNUM
    MOV BL,AL
    AND AL,0F0H
    AND BL,0FH
     
    MOV CL,04H
    ROL AL,CL
     
    LEA DI,HEXADEC
    MOV [DI],AL
    MOV [DI+1],BL
   
       LEA SI,HEXADEC        
       MOV CL,2
       MOV CH,0       
CHECK:
       CMP [SI],9
       JG ALPHA
   
NUM:   ADD [SI],30H
       JMP DONE
      
ALPHA: ADD [SI],37H 
            
DONE:       
       INC SI
       LOOP CHECK
   
      
    LEA DX,MSG2
    MOV AH,9
    INT 21H
      
    LEA DX,HEXADEC
    MOV AH,9
    INT 21H
   
    LEA DX,MSG3
    MOV AH,9
    INT 21H
      
    LEA DX,TWOSCOMP
    MOV AH,9
    INT 21H
            
    MOV AH,4CH
    INT 21H        
CODE ENDS  

HEX2BIN PROC NEAR
    MOV CX,0
    MOV BX,2
   
LOOP1: MOV DX,0
       DIV BX
       ADD DL,30H
       PUSH DX
       INC CX
       CMP AX,1
       JG LOOP1
     
       ADD AL,30H
       MOV [SI],AL
     
LOOP2: POP AX
       INC SI
       MOV [SI],AL
       LOOP LOOP2
       RET
HEX2BIN ENDP           
   
END START

[/codesyntax]

Screen shots :-

Asm_program_Dec_to_2sCompBin_Hexa

Outputs :-

Asm_program_Dec_to_2sCompBin_Hexa_Output1

Asm_program_Dec_to_2sCompBin_Hexa_Output2

Leave a Reply