thanos
unknown
plain_text
5 months ago
13 kB
20
Indexable
//operations %macro WRITE 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro READ 2 mov rax,0 mov rdi,0 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro EXIT 0 mov rax,60 mov rdi,1 syscall %endmacro section .data menumsg: db 10,10,"1.Addition",10 db "2.Subtraction",10 db "3.Multiplication",10 db "4.Division",10 db "5.Exit",10 db "Enter your choice : " menulen equ $-menumsg msg1 db "Enter two numbers : ",10 len1 equ $-msg1 msg2 db "The addition is : " len2 equ $-msg2 msg3 db "The subtraction is : " len3 equ $-msg3 msg4 db "The multiplication is : " len4 equ $-msg4 msg5 db "The Quotient is : " len5 equ $-msg5 msg6 db 10,"The Remainder is : " len6 equ $-msg6 msg7 db "Wrong choice !! ",10 len7 equ $-msg7 section .bss a resq 1 b resq 1 c resq 1 d resq 1 char_buff resb 17 choice resb 02 section .text global _start _start: WRITE msg1,len1 READ char_buff,17 call accept mov[a],rbx READ char_buff,17 call accept mov[b],rbx printMenu: WRITE menumsg,menulen READ choice,02 cmp byte[choice],31H je Addition cmp byte[choice],32H je Subtraction cmp byte[choice],33H je Multiplication cmp byte[choice],34H je Division cmp byte[choice],35H je EXIT WRITE msg7,len7 jmp printMenu Addition: mov rax,[a] add rax,[b] mov [c],rax WRITE msg2,len2 mov rbx,[c] call display jmp printMenu Subtraction: mov rax,[a] sub rax,[b] mov [c],rax WRITE msg3,len3 mov rbx,[c] call display jmp printMenu Multiplication: mov rax,qword[a] mul qword[b] mov [c],rdx mov [d],rax WRITE msg4,len4 mov rbx,[c] call display mov rbx,[d] call display jmp printMenu Division: mov rdx,00 mov rax,qword[a] div qword[b] mov [c],rax mov [d],rdx WRITE msg5,len5 mov rbx,[c] call display WRITE msg6,len6 mov rbx,[d] call display jmp printMenu accept: dec rax mov rsi,char_buff mov rbx,00 up:mov rdx,00H mov dl,byte[rsi] cmp dl,39H jbe sub30 sub dl,07H sub30:sub dl,30H shl rbx,04H add rbx,rdx inc rsi dec rax jnz up ret display: mov rax,16 mov rsi,char_buff above:rol rbx,04H mov dl,bl and dl,0FH cmp dl,09H jbe add30 add dl,07H add30:add dl,30H mov byte[rsi],dl inc rsi dec rax jnz above WRITE char_buff,16 ret //hex to bcd %macro WRITE 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro READ 2 mov rax,0 mov rdi,0 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro EXIT 0 mov rax,60 mov rdi,1 syscall %endmacro section .data msg1 db "Enter the HEX number : ", len1 equ $-msg1 msg2 db "The BCD Equivalent : " len2 equ $-msg2 msg3 db " ",10 len3 equ $-msg3 section .bss char_buff resb 17 ans resq 1 cnt resb 1 section .text global _start _start: WRITE msg1, len1 READ char_buff, 17 call accept WRITE msg2, len2 mov rcx, 00 mov rax, rbx l1:mov rdx, 00 mov rbx, 0Ah div rbx push rdx inc rcx cmp rax, 00 jnz l1 mov byte[cnt], cl l2:pop rbx cmp bl, 09H jbe l3 add bl, 07H l3:add bl, 30H mov byte[ans], bl WRITE ans, 01 dec byte[cnt] jnz l2 WRITE msg3, len3 EXIT accept: dec rax mov rsi,char_buff mov rbx,00 up:mov rdx,00H mov dl,byte[rsi] cmp dl,39H jbe sub30 sub dl,07H sub30:sub dl,30H shl rbx,04H add rbx,rdx inc rsi dec rax jnz up ret display: mov rsi, char_buff mov rcx, 16 up2:rol rbx, 04 mov dl, bl and dl, 0FH cmp dl, 09H jbe add30 add dl, 07H add30:add dl, 30H mov byte[rsi], dl inc rsi dec rcx jnz up2 WRITE char_buff, 16 ret // bcd to hex %macro WRITE 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro READ 2 mov rax,0 mov rdi,0 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro EXIT 0 mov rax,60 mov rdi,1 syscall %endmacro section .data msg1 db "Enter the BCD number : " len1 equ $-msg1 msg2 db "The Hex Equivalent : " len2 equ $-msg2 msg3 db " ",10 len3 equ $-msg3 section .bss char_buff resb 17 ans resq 1 section .text global _start _start: WRITE msg1, len1 READ char_buff, 17 dec rax mov rbx, 00 mov rsi, char_buff mov rcx, rax up3:mov rax, 0Ah mul rbx mov rbx, rax mov rdx, 00H mov dl, byte[rsi] sub dl, 30H add rbx, rdx inc rsi dec rcx jnz up3 mov [ans], rbx WRITE msg2, len2 mov rbx, [ans] call display WRITE msg3, len3 EXIT accept: dec rax mov rsi,char_buff mov rbx,00 up:mov rdx,00H mov dl,byte[rsi] cmp dl,39H jbe sub30 sub dl,07H sub30:sub dl,30H shl rbx,04H add rbx,rdx inc rsi dec rax jnz up ret display: mov rsi, char_buff mov rcx, 16 up2:rol rbx, 04 mov dl, bl and dl, 0FH cmp dl, 09H jbe add30 add dl, 07H add30:add dl, 30H mov byte[rsi], dl inc rsi dec rcx jnz up2 WRITE char_buff, 16 ret // string %macro read 2 mov rax, 0 mov rdi, 0 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro write 2 mov rax, 1 mov rdi, 1 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro EXIT 0 mov rax,60 mov rdi,00 syscall %endmacro section .data Menumsg db 10,10, "1.Stringlength",10 db "2.String copy",10 db "3.String reverse",10 db "4.String compare",10 db "5.String concat",10 db "6.Check palindrome",10 db "7.String substring",10 db "8.Exit",10 db "Enter your choice : " Menulen equ $ - Menumsg msg1 db "Enter String 1 : " len1 equ $ - msg1 msg2 db "Enter String 2 : " len2 equ $ - msg2 msg3 db "The length of string : " len3 equ $ - msg3 msg4 db "The copied string : " len4 equ $ - msg4 msg5 db "The reverse String : " len5 equ $ - msg5 msg6 db "String equal",10 len6 equ $ - msg6 msg7 db "String are not equal",10 len7 equ $ - msg7 msg8 db "The concated string : " len8 equ $ - msg8 msg9 db "String palindrome",10 len9 equ $ - msg9 msg10 db "String not palindrome",10 len10 equ $ - msg10 msg11 db "Substring",10 len11 equ $ - msg11 msg12 db "Not substring",10 len12 equ $ - msg12 msg13 db "Wrong choice",10 len13 equ $ - msg13 section .bss string1 resb 20 string2 resb 20 string3 resb 40 l1 resq 1 l2 resq 1 l3 resq 1 choice resb 2 buff resb 16 section .text global _start _start: write msg1, len1 read string1, 20 dec rax mov [l1], rax ptmenu:write Menumsg, Menulen read choice, 2 cmp byte [choice], 31h je strlen cmp byte [choice], 32h je strcpy cmp byte [choice], 33h je strrev cmp byte [choice], 34h je strcmp cmp byte [choice], 35h je strcat cmp byte [choice], 36h je strpalindrome cmp byte [choice], 37h je strsub cmp byte [choice], 38h je EXIT write msg13, len13 jmp ptmenu strlen: write msg3, len3 mov rbx, [l1] call display jmp ptmenu strcpy: mov rsi, string1 mov rdi, string3 mov rcx, [l1] cld rep movsb write msg4, len4 write string3, [l1] jmp ptmenu strrev: mov rsi, string1 add rsi, [l1] dec rsi mov rdi, string3 mov rcx, [l1] up:mov bl, byte [rsi] mov byte [rdi], bl dec rsi inc rdi dec rcx jnz up write msg5, len5 write string3, [l1] jmp ptmenu strcmp: write msg2, len2 read string2, 20 dec rax mov [l2], rax mov rbx, [l1] cmp rbx, qword [l2] jne nequal mov rsi, string1 mov rdi, string2 mov rcx, [l1] cld repe cmpsb jne nequal write msg6, len6 jmp ptmenu nequal:write msg7, len7 jmp ptmenu strcat: write msg2, len2 read string2, 20 dec rax mov [l2], rax mov rsi, string1 mov rdi, string3 mov rcx, [l1] cld rep movsb mov rsi, string2 mov rcx, [l2] rep movsb mov rbx, [l1] add rbx, [l2] mov [l3], rbx write msg8, len8 write string3, [l3] jmp ptmenu strpalindrome: write msg1, len1 read string1, 20 dec rax mov [l1], rax mov rsi, string1 add rsi, [l1] dec rsi mov rdi, string3 mov rcx, [l1] up1:mov dl, byte [rsi] mov byte [rdi], dl dec rsi inc rdi dec rcx jnz up1 mov rsi, string1 mov rdi, string3 mov rcx, [l1] cld repe cmpsb jne nequal1 write msg9, len9 jmp ptmenu nequal1:write msg10, len10 jmp ptmenu strsub: write msg1, len1 read string1, 20 dec rax mov [l1], rax write msg2, len2 read string2, 20 dec rax mov [l2], rax mov rbx, qword [l2] mov rsi, string1 mov rdi, string2 up3:mov al, byte [rsi] cmp al, byte [rdi] je same mov rdi, string2 mov rbx, qword [l2] same:inc rsi inc rdi dec rbx dec qword [l1] cmp rbx, 0 je st cmp qword [l1], 0 jne up3 write msg12, len12 jmp ptmenu st:write msg11, len11 jmp ptmenu EXIT display: mov rsi, buff mov rcx, 16 up2:rol rbx, 4 mov dl, bl and dl, 0FH cmp dl, 09H jbe add30 add dl, 07H add30:add dl, 30H mov byte [rsi], dl inc rsi dec rcx jnz up2 write buff, 16 ret //roots extern printf,scanf %macro PRINT 02 push rbp mov rax,00 mov rdi,%1 mov rsi,%2 call printf pop rbp %endmacro %macro SCAN 02 push rbp mov rax,00 mov rdi,%1 mov rsi,%2 call scanf pop rbp %endmacro %macro PRINTFLOAT 02 push rbp mov rax,01 mov rdi,%1 movsd xmm0,%2 call printf pop rbp %endmacro section .data msg1 db "enter a,b and c",10,0 msg2 db "Roots are",10,0 msg3 db " ",10,0 fmt1 db "%s",0 fmt2 db "%lf",0 section .bss a resq 1 b resq 1 c resq 1 t1 resq 1 t2 resq 1 t3 resq 1 t4 resq 1 r1 resq 1 r2 resq 1 temp resw 1 section .text global main main: PRINT fmt1,msg1 SCAN fmt2,a SCAN fmt2,b SCAN fmt2,c PRINT fmt1,msg2 finit fld qword[b] fmul qword[b] fstp qword[t1] fld qword[a] fmul qword[c] mov word[temp],04 fimul word[temp] fstp qword[t2] fld qword[t1] fsub qword[t2] fstp qword[t1] fld qword[t1] fabs fsqrt fstp qword[t2] fld qword[b] fchs fstp qword[t3] fld qword[a] mov word[temp],02 fimul word[temp] fstp qword[t4] cmp qword[t1],00 je same fld qword[t3] fsub qword[t2] fdiv qword[t4] fstp qword[r1] PRINTFLOAT fmt2,[r1] same:fld qword[t3] fadd qword[t2] fdiv qword[t4] fstp qword[r2] PRINT fmt1,msg3 PRINTFLOAT fmt2,[r2] mov rax,00 ret //shift add %macro WRITE 2 mov rax, 01 mov rdi, 01 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro READ 2 mov rax, 00 mov rdi, 00 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro EXIT 00 mov rax, 60 mov rdi, 00 syscall %endmacro section .data msg1 db "Enter two numbers : ",10 len1 equ $-msg1 msg2 db "Multiplication by Shift & Add : " len2 equ $-msg2 msg3 db " ",10 len3 equ $-msg3 section .bss char_buff resb 17 actl resq 1 m resq 1 n resq 1 ans resq 1 A resq 1 B resq 1 Q resq 1 section .text global _start _start: WRITE msg1, len1 READ char_buff, 17 call accept mov [m], rbx READ char_buff ,17 call accept mov [n], rbx mov qword[A], 00H mov rbx, qword[m] mov qword[B], rbx mov rbx, qword[n] mov qword[Q], rbx mov rcx, 64 l2:mov rbx, [Q] AND rbx, 01H jz ShiftAQ mov rbx, [B] add [A], rbx ShiftAQ:shr qword [Q], 01H mov rbx, [A] AND rbx, 01 jz ShiftA mov rbx, 01 ror rbx, 01 OR [Q], rbx ShiftA:shr qword[A], 01 dec rcx jnz l2 WRITE msg2, len2 mov rbx, [A] call display mov rbx, [Q] call display WRITE msg3, len3 EXIT accept: dec rax mov rsi,char_buff mov rbx,00 up:mov rdx,00H mov dl,byte[rsi] cmp dl,39H jbe sub30 sub dl,07H sub30:sub dl,30H shl rbx,04H add rbx,rdx inc rsi dec rax jnz up ret display: mov rax,16 mov rsi,char_buff above:rol rbx,04H mov dl,bl and dl,0FH cmp dl,09H jbe add30 add dl,07H add30:add dl,30H mov byte[rsi],dl inc rsi dec rax jnz above WRITE char_buff,16 ret inc rsi dec rcx jnz above WRITE char_buff, 16 ret //submissive add %macro WRITE 2 mov rax, 01 mov rdi, 01 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro READ 2 mov rax, 00 mov rdi, 00 mov rsi, %1 mov rdx, %2 syscall %endmacro %macro EXIT 00 mov rax, 60 mov rdi, 00 syscall %endmacro section .data msg1 db "Enter two numbers : ",10 len1 equ $-msg1 msg2 db "Multiplication by Successive Addition : " len2 equ $-msg2 msg3 db " ",10 len3 equ $-msg3 section .bss char_buff resb 17 actl resq 1 m resq 1 n resq 1 ans resq 1 section .text global _start _start: WRITE msg1, len1 READ char_buff, 17 call accept mov [m], rbx READ char_buff ,17 call accept mov [n], rbx mov rbx, 00H mov rcx, [n] l1:add rbx, [m] dec rcx jnz l1 mov [ans], rbx WRITE msg2, len2 mov rbx, [ans] call display WRITE msg3, len3 EXIT accept: dec rax mov rsi,char_buff mov rbx,00 up:mov rdx,00H mov dl,byte[rsi] cmp dl,39H jbe sub30 sub dl,07H sub30:sub dl,30H shl rbx,04H add rbx,rdx inc rsi dec rax jnz up ret display: mov rax,16 mov rsi,char_buff above:rol rbx,04H mov dl,bl and dl,0FH cmp dl,09H jbe add30 add dl,07H add30:add dl,30H mov byte[rsi],dl inc rsi dec rax jnz above WRITE char_buff,16 ret inc rsi dec rcx jnz above WRITE char_buff, 16 ret
Editor is loading...
Leave a Comment