thanos
unknown
plain_text
a year ago
13 kB
21
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