Procedure that reads a text-paragraph from a file and then prints the number of characters on the screen.
UNIVERSITY OF THE PUNJAB
Third Semester 2017
Examination: B.S. 4 Years Programme
Paper: Computer Organization and Assembly Language
Course Code: IT-203 / 21402
Question # 3:
Write a procedure that reads a text-paragraph from a file and then prints the number of characters on the screen.
Solution:
INCLUDE Irvine32.inc
INCLUDE macros.inc
BUFFER_SIZE = 5000
.data
buffer BYTE BUFFER_SIZE DUP(?)
filename BYTE 80 DUP(0)
fileHandle HANDLE ?
.code
main PROC
call readParagraph
call crlf
call WaitMsg
exit
main ENDP
readParagraph PROC
; Let user input a filename.
mWrite "Enter an input filename: "
mov edx,OFFSET filename
mov ecx,SIZEOF filename
call ReadString
; Open the file for input.
mov edx,OFFSET filename
call OpenInputFile
mov fileHandle,eax
; Check for errors.
cmp eax,INVALID_HANDLE_VALUE ; error opening file?
jne file_ok
; no: skip
mWrite <"Cannot open file",0dh,0ah>
jmp quit
; and quit
file_ok:
; Read the file into a buffer.
mov edx,OFFSET buffer
mov ecx,BUFFER_SIZE
call ReadFromFile
jnc check_buffer_size
; error reading?
mWrite "Error reading file. "
; yes: show error message
call WriteWindowsMsg
jmp close_file
check_buffer_size:
cmp eax,BUFFER_SIZE
; buffer large enough?
jb buf_size_ok
; yes
mWrite <"Error: Buffer too small for the file",0dh,0ah>
jmp quit
; and quit
buf_size_ok:
mov buffer[eax],0
; insert null terminator
mWrite "Paragraph size: "
call WriteDec
; display file size
call Crlf
; Display the buffer.
mWrite <"Buffer:",0dh,0ah>
mov edx,OFFSET buffer
; display the buffer
call WriteString
call Crlf
close_file:
mov eax,fileHandle
call CloseFile
quit:
ret
readParagraph ENDP
END main
INCLUDE macros.inc
BUFFER_SIZE = 5000
.data
buffer BYTE BUFFER_SIZE DUP(?)
filename BYTE 80 DUP(0)
fileHandle HANDLE ?
.code
main PROC
call readParagraph
call crlf
call WaitMsg
exit
main ENDP
readParagraph PROC
; Let user input a filename.
mWrite "Enter an input filename: "
mov edx,OFFSET filename
mov ecx,SIZEOF filename
call ReadString
; Open the file for input.
mov edx,OFFSET filename
call OpenInputFile
mov fileHandle,eax
; Check for errors.
cmp eax,INVALID_HANDLE_VALUE ; error opening file?
jne file_ok
; no: skip
mWrite <"Cannot open file",0dh,0ah>
jmp quit
; and quit
file_ok:
; Read the file into a buffer.
mov edx,OFFSET buffer
mov ecx,BUFFER_SIZE
call ReadFromFile
jnc check_buffer_size
; error reading?
mWrite "Error reading file. "
; yes: show error message
call WriteWindowsMsg
jmp close_file
check_buffer_size:
cmp eax,BUFFER_SIZE
; buffer large enough?
jb buf_size_ok
; yes
mWrite <"Error: Buffer too small for the file",0dh,0ah>
jmp quit
; and quit
buf_size_ok:
mov buffer[eax],0
; insert null terminator
mWrite "Paragraph size: "
call WriteDec
; display file size
call Crlf
; Display the buffer.
mWrite <"Buffer:",0dh,0ah>
mov edx,OFFSET buffer
; display the buffer
call WriteString
call Crlf
close_file:
mov eax,fileHandle
call CloseFile
quit:
ret
readParagraph ENDP
END main
Let me know in the comment section if you have any question.
Previous Post:
Program that alphabetically sorts an array of ten characters.
Comments
Post a Comment