Need help with this program.

Suppose the time field of a file directory entry uses bits 0-4 for the seconds, bits 5-10 for the  minutes, and bits 11-15 for the hours (24-hour clock). For example, the following binary value indicates a time of 02:16:07, in hh:mm:ss format:

00010 010000 00111

Write a procedure named ShowFileTime that receives a binary file time value in the AX
register and displays the time in hh:mm:ss format.

The following program is written to accomplish the task, but it is incomplete. The code under label L1 and L2 in ShowFiletimeProc needs to be completed.


time WORD 0001001000000111b ; 02:16:07

main PROC
call Clrscr

mov ax, time ; AX = time in MS-DOS format call ShowFileTime

exit main ENDP

;-------------------------------------------------------- ShowFileTime PROC
; Receives a binary file time value in MS-DOS format
; and displays the time in hh:mm:ss format.
; Receives: AX = time in binary MS-DOS format
; Returns: nothing

push ebx push edx

and eax,0FFFFh ; clear upper half of EAX mov bx,ax ; BX = a copy of the file time shr ax,11 ; shift hour to the right
cmp ax,10 ; is the hour >= 10?
jae L1 ; yes: display it
call DisplayZero ; no: display a leading zero

L1: call WriteDec

........ ; display the hour

call WriteDec


static function sub ShowFileTime (dim binfv as integer)
copy cx, binfc
copy ax, result
shl ax, 4
copy ax, 2
mov bx, ax
interrupt 21h
return ax
end function

L3: call WriteDec ; display seconds call Crlf

pop edx pop ebx ret
ShowFileTime ENDP

;-------------------------------------------------------- DisplayZero PROC
; Displays a zero character
; Receives: nothing
; Returns: nothing
;-------------------------------------------------------- push eax

mov al,'0' ; char to display call WriteChar

pop eax ret
DisplayZero ENDP

END main
Posted on 2010-11-21 19:18:07 by goonjrulz