In: Electrical Engineering
c++ code :
#include<iostream>
using namespace std;
intmain()
{
while (true)
{
cout << "Enter hours, minutes and seconds." << endl;
cout << "hours:";
cin >> hour;
if (hour < 0 || hour > 23)
{
cout << "Error: hours should be in between [0..23]" << endl;
continue;
}
cout << "minutes:";
cin >> min;
if (min < 0 || min > 59)
{
cout << "Error: minutes should be in between [0..59]" << endl;
continue;
}
cout << "seconds:";
cin >> sec;
if (sec < 0 || sec > 59)
{
cout << "Error: seconds should be in between [0..59]" << endl;
continue;
}
break;
}
}
cout << "Total seconds: " << (sec + min*60 + hour*60*60) << endl;
ASSEMBLY LEVEL PROGRAMMING
.MODEL SMALL
.STACK 100H
.DATA
PROMPT_1 DB 'Enter the time in seconds up to 65535 = $'
PROMPT_2 DB 0DH,0AH,'The time in hh:mm:ss format is = $'
SEPARATOR DB ' : $'
.CODE
MAIN PROC
MOV AX, @DATA ; initialize DS
MOV DS, AX
LEA DX, PROMPT_1 ; load and display the string PROMPT_1
MOV AH, 9
INT 21H
CALL INDEC ; call the procedure INDEC
PUSH AX ; puah AX onto the STACK
LEA DX, PROMPT_2 ; load and display the string PROMPT_2
MOV AH, 9
INT 21H
POP AX ; pop a value from STACK into AX
XOR DX, DX ; clear DX
MOV CX, 3600 ; set CX=3600
DIV CX ; set AX=DX:AX\CX , DX=DX:AX%CX
CMP AX, 10 ; compare AX with 10
JGE @HOURS ; jump to label @HOURS if AX>=10
PUSH AX ; push AX onto the STACK
MOV AX, 0 ; set AX=0
CALL OUTDEC ; call the procedure OUTDEC
POP AX ; pop a value from STACK into AX
@HOURS: ; jump label
CALL OUTDEC ; call the procedure OUTDEC
MOV AX, DX ; set AX=DX
PUSH AX ; push AX onto the STACK
LEA DX, SEPARATOR ; load and display the string SEPARATOR
MOV AH, 9
INT 21H
POP AX ; pop a value from STACK into AX
XOR DX, DX ; clear DX
MOV CX, 60 ; set CX=60
DIV CX ; set AX=DX:AX\CX , DX=DX:AX%CX
CMP AX, 10 ; compare AX with 10
JGE @MINUTES ; jump to label @MINUTES if AX>=10
PUSH AX ; push AX onto the STACK
MOV AX, 0 ; set AX=0
CALL OUTDEC ; call the procedure OUTDEC
POP AX ; pop a value from STACK into AX
@MINUTES: ; jump label
CALL OUTDEC ; call the procedure OUTDEC
MOV BX, DX ; set BX=DX
LEA DX, SEPARATOR ; load and display the string SEPARATOR
MOV AH, 9
INT 21H
MOV AX, BX ; set AX=BX
CMP AX, 10 ; compare AX with 10
JGE @SECONDS ; jump to label @SECONDS if AX>=10
PUSH AX ; push AX onto the STACK
MOV AX, 0 ; set AX=0
CALL OUTDEC ; call the procedure OUTDEC
POP AX ; pop a value from STACK into AX
@SECONDS: ; jump label
CALL OUTDEC ; call the procedure OUTDEC
MOV AH, 4CH ; return control to DOS
INT 21H
MAIN ENDP