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
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