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

Comments