Sunday, 19 April 2015

addhex

section .data
    msg1 db 'ACCEPT N HEXADECIMAL NUMBER & ADD THEM',10
    msg1len equ $-msg1
   
    msg2 db 'Enter the number you want:',10
    msg2len equ $-msg2

    msg3 db 'Enter the 64-bit hexadecimal numbers:',10
    msg3len equ $-msg3
       
    msg4 db 'addition of given number is:',10
    msg4len equ $-msg4
section .bss
   
    nascii resb 3
    nascii_len equ $-nascii
         count resb 1
    dispnum resb 16
    resultl resq 1
    resulth resq 1
    buffer resb 17
    buffer_len: equ $-buffer

%macro dispmsg 2                   
   
    mov rax,4          
    mov rbx,1                  
    mov rcx,%1          
    mov rdx,%2           
    int 80h               
%endmacro

%macro accept 2              
   
    mov rax,3          
    mov rbx,1                 
    mov rcx,%1            
    mov rdx,%2                
    int 80h                   
%endmacro


section .text
global _start:
_start:
    dispmsg msg1,msg1len        

    dispmsg msg2,msg2len        
    accept nascii,nascii_len    
    call accept8                
   
    mov [count],bl             
        mov rdi,[count]             

nextnum:
    dispmsg msg3,msg3len        
    accept buffer,buffer_len    
    call accept64                

    add [resultl],rbx           
    jnc next                     
    inc word[resulth]            
next:
    dec rdi                     
    jnz nextnum                  
        dispmsg msg4,msg4len        
   
    mov rax,[resulth]            
    call display64               

    mov rax,[resultl]            
    call display64                 

   
    mov rax,1
    mov rbx,0
    int 80h


accept8: 
    xor bl,bl                    
    mov rcx,02                  
    mov rsi,nascii                
        
l1:    shl bl,4                     
    mov al,[rsi]                 
    cmp al,39h                   
     
jbe sub30                            
    sub al,07h                  

sub30:  sub al,30h               
    add bl,al                   
    inc rsi                      
    loop l1                     
ret                                 

accept64: 
    mov rbx,00                  
    mov ecx,16                   
    mov esi,buffer               
    mov rax,00                   
   
L3:    shl rbx,4                    
    mov al,[esi]                 
    cmp al,39h                   
    jbe skip2                   
    sub al,07h                   

skip2:    sub al,30h                   
    add rbx,rax                  
        inc esi                      
    loop L3                      
ret


display64:
   
    mov     rsi,dispnum+15   
    mov     rcx,16       

cnt:    mov     rdx,0       
    mov     rbx,16       
    div     rbx             
    cmp     dl, 09h       
    jbe      add30           
    add      dl, 07h         
add30:
    add     dl,30h       
    mov     [rsi],dl   
    dec     rsi       
    dec     rcx       
    jnz     cnt       


     dispmsg dispnum,16   
ret

No comments:

Post a Comment