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