f1.asm
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
Section .data
title db 10,13,"****ASSIGNMENT: 5****"
title_len equ $-title
openmsg db 10,13,"File Opened Successfully"
openmsg_len equ $-openmsg
errormsg db 10,13,"Failed to open file"
errormsg_len equ $-errormsg
fname db "abc.txt"
Section .bss
global cnt1,cnt2,cnt3,buffer,bufferlen,fdis
cnt1 resb 8
cnt2 resb 8
cnt3 resb 8
bufferlen resb 8
buffer resb 200
fdis resq 1 ;for storing file descriptor value
Section .text
global _start
extern CSPACE,CNEWLINE,CCHAR
start:
print title,title_len
;Opening file
mov rax,2
mov rdi,fname
mov rsi,2
mov rdx,777
syscall
mov qword[fdis],rax ;RAX contains file descriptor value
bt rax,63 ;63rd bit is +ve(0) if file is successfull opened else it is -ve (1)
jc next
print openmsg,openmsg_len
jmp next1
next:
print errormsg,errormsg_len
jmp EXIT
next1:
;reading contents of file in buffer
mov rax,0
mov rdi,[fdis]
mov rsi,buffer
mov rdx,200
syscall
;rax contains actual number of bytes read
mov qword[bufferlen],rax
mov qword[cnt1],rax ;cnt1 for using in cspace procedure
mov qword[cnt2],rax ;cnt2 for using in cnewline procedure
mov qword[cnt3],rax ;cnt3 for using in cchar procedure
call CCHAR
call CSPACE
call CNEWLINE
mov rax,3
mov rdi,fname
syscall
EXIT:
mov rax,60
mov rdi,0
syscall
f2.asm
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
spacemsg db 10,13,"Spaces = "
spacemsg_len equ $-spacemsg
newlinemsg db 10,13, "Return(Enter) chars = "
newlinemsg_len equ $-newlinemsg
chms db 10,13,"Character count: "
chms_len equ $-chms
chinput db 10,13,"Character Input: ",
chinput_len equ $-chinput
scnt db 00H
ncnt db 00H
chcnt db 00H
hexcnt2 db 00H
section .bss
extern cnt1,cnt2,cnt3,buffer,bufferlen
spacecount resb 2
ch1 resb 2
newlinecount resb 2
chcount resb 2
section .text
global _start1
global CSPACE, CNEWLINE,CCHAR
_start1:
CSPACE:
mov rsi,buffer
up:
mov al,byte[rsi]
cmp al,20H
je next2
inc rsi
dec qword[cnt1]
jnz up
jmp next3
next2:
inc byte[scnt]
inc rsi
dec qword[cnt1]
jmp up
next3:
mov bl, byte[scnt]
mov rdi, spacecount
call HtoA
print spacemsg,spacemsg_len
print spacecount,2
ret
CNEWLINE:
mov rsi,buffer
up2:
mov al,byte[rsi]
cmp al,0x0A
je next4
inc rsi
dec qword[cnt2]
jnz up2
jmp next5
next4:
inc byte[ncnt]
inc rsi;
dec qword[cnt2]
jnz up2
next5:
mov bl, byte[ncnt]
mov rdi, newlinecount
call HtoA
print newlinemsg,newlinemsg_len
print newlinecount,2
ret
CCHAR:
print chinput,chinput_len
accept ch1,2
mov rsi,buffer
up3:
mov al,byte[rsi]
cmp al,byte[ch1]
je nextl
inc rsi
dec qword[cnt3]
jnz up3
jmp next7
nextl:
inc byte[chcnt]
inc rsi;
dec qword[cnt3]
jnz up3
next7:
mov bl, byte[chcnt]
mov rdi, chcount
call HtoA
print chms,chms_len
print chcount,2
ret
;------HEX TO ASCII CONVERSION METHOD FOR VALUE(2 DIGIT) ----------------
HtoA: ;hex_no to be converted is in ebx //result is stored in rdi/user defined variable
mov byte[hexcnt2],02H
h2aup:
rol bl,04
mov cl,bl
and cl,0FH
CMP CL,09H
jbe add30
ADD cl,07H
add30:
add cl, 30H
mov byte[rdi],cl
INC rdi
dec byte[hexcnt2]
JNZ h2aup
ret
exit:
mov rax,60
mov rdi,0
syscall
abc.txt
Welcome SE computer student in SVIT College, Chincholi, Sinner, Dist: Nashik
How are you
OUTPUT:
ntlab@ntlab-Veriton-M200-H81:~/file$ nasm -f elf64 f1.asm
ntlab@ntlab-Veriton-M200-H81:~/file$ nasm -f elf64 f2.asm
ntlab@ntlab-Veriton-M200-H81:~/file$ ld -o prog f1.o f2.o
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
ntlab@ntlab-Veriton-M200-H81:~/file$ ./prog
****ASSIGNMENT: 5****
File Opened Successfully
Character Input: c
Character count: 03
Spaces = 0C
Return(Enter) chars = 03
ntlab@ntlab-Veriton-M200-H81:~/file$
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
Section .data
title db 10,13,"****ASSIGNMENT: 5****"
title_len equ $-title
openmsg db 10,13,"File Opened Successfully"
openmsg_len equ $-openmsg
errormsg db 10,13,"Failed to open file"
errormsg_len equ $-errormsg
fname db "abc.txt"
Section .bss
global cnt1,cnt2,cnt3,buffer,bufferlen,fdis
cnt1 resb 8
cnt2 resb 8
cnt3 resb 8
bufferlen resb 8
buffer resb 200
fdis resq 1 ;for storing file descriptor value
Section .text
global _start
extern CSPACE,CNEWLINE,CCHAR
start:
print title,title_len
;Opening file
mov rax,2
mov rdi,fname
mov rsi,2
mov rdx,777
syscall
mov qword[fdis],rax ;RAX contains file descriptor value
bt rax,63 ;63rd bit is +ve(0) if file is successfull opened else it is -ve (1)
jc next
print openmsg,openmsg_len
jmp next1
next:
print errormsg,errormsg_len
jmp EXIT
next1:
;reading contents of file in buffer
mov rax,0
mov rdi,[fdis]
mov rsi,buffer
mov rdx,200
syscall
;rax contains actual number of bytes read
mov qword[bufferlen],rax
mov qword[cnt1],rax ;cnt1 for using in cspace procedure
mov qword[cnt2],rax ;cnt2 for using in cnewline procedure
mov qword[cnt3],rax ;cnt3 for using in cchar procedure
call CCHAR
call CSPACE
call CNEWLINE
mov rax,3
mov rdi,fname
syscall
EXIT:
mov rax,60
mov rdi,0
syscall
f2.asm
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
spacemsg db 10,13,"Spaces = "
spacemsg_len equ $-spacemsg
newlinemsg db 10,13, "Return(Enter) chars = "
newlinemsg_len equ $-newlinemsg
chms db 10,13,"Character count: "
chms_len equ $-chms
chinput db 10,13,"Character Input: ",
chinput_len equ $-chinput
scnt db 00H
ncnt db 00H
chcnt db 00H
hexcnt2 db 00H
section .bss
extern cnt1,cnt2,cnt3,buffer,bufferlen
spacecount resb 2
ch1 resb 2
newlinecount resb 2
chcount resb 2
section .text
global _start1
global CSPACE, CNEWLINE,CCHAR
_start1:
CSPACE:
mov rsi,buffer
up:
mov al,byte[rsi]
cmp al,20H
je next2
inc rsi
dec qword[cnt1]
jnz up
jmp next3
next2:
inc byte[scnt]
inc rsi
dec qword[cnt1]
jmp up
next3:
mov bl, byte[scnt]
mov rdi, spacecount
call HtoA
print spacemsg,spacemsg_len
print spacecount,2
ret
CNEWLINE:
mov rsi,buffer
up2:
mov al,byte[rsi]
cmp al,0x0A
je next4
inc rsi
dec qword[cnt2]
jnz up2
jmp next5
next4:
inc byte[ncnt]
inc rsi;
dec qword[cnt2]
jnz up2
next5:
mov bl, byte[ncnt]
mov rdi, newlinecount
call HtoA
print newlinemsg,newlinemsg_len
print newlinecount,2
ret
CCHAR:
print chinput,chinput_len
accept ch1,2
mov rsi,buffer
up3:
mov al,byte[rsi]
cmp al,byte[ch1]
je nextl
inc rsi
dec qword[cnt3]
jnz up3
jmp next7
nextl:
inc byte[chcnt]
inc rsi;
dec qword[cnt3]
jnz up3
next7:
mov bl, byte[chcnt]
mov rdi, chcount
call HtoA
print chms,chms_len
print chcount,2
ret
;------HEX TO ASCII CONVERSION METHOD FOR VALUE(2 DIGIT) ----------------
HtoA: ;hex_no to be converted is in ebx //result is stored in rdi/user defined variable
mov byte[hexcnt2],02H
h2aup:
rol bl,04
mov cl,bl
and cl,0FH
CMP CL,09H
jbe add30
ADD cl,07H
add30:
add cl, 30H
mov byte[rdi],cl
INC rdi
dec byte[hexcnt2]
JNZ h2aup
ret
exit:
mov rax,60
mov rdi,0
syscall
abc.txt
Welcome SE computer student in SVIT College, Chincholi, Sinner, Dist: Nashik
How are you
OUTPUT:
ntlab@ntlab-Veriton-M200-H81:~/file$ nasm -f elf64 f1.asm
ntlab@ntlab-Veriton-M200-H81:~/file$ nasm -f elf64 f2.asm
ntlab@ntlab-Veriton-M200-H81:~/file$ ld -o prog f1.o f2.o
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
ntlab@ntlab-Veriton-M200-H81:~/file$ ./prog
****ASSIGNMENT: 5****
File Opened Successfully
Character Input: c
Character count: 03
Spaces = 0C
Return(Enter) chars = 03
ntlab@ntlab-Veriton-M200-H81:~/file$
No comments:
Post a Comment