thanos

 avatar
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