You are on page 1of 3

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.
INCLUDE Irvine32.inc
.data
time WORD 0001001000000111b ; 02:16:07
.code
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


........
........

L2:
call WriteDec
;
display
the
minutes
........
........
........
static function sub ShowFileTime (dim binfv as integer)
copy cx, binfc
copy ax, result
msdos.interrupt()
shl ax, 4
copy ax, 2
mov bx, ax
interrupt 21h
msdos.show
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

You might also like