DOSSEG
.MODEL SMALL,BASIC,FARSTACK ;============================================================================== ; EXTRN CLEAR:FAR ;CLEAR SCREEN EXTRN GETDEC:FAR ;PROCEDURE TO 16-BIT INTEGER EXTRN GETDEC$:FAR ;DISPLAY 32-BIT INTEGER EXTRN NEWLINE:FAR ;DISPLAY NEWLINE EXTRN PUTDEC:FAR ;DISPLAY 16-BIT INTEGER EXTRN PUTDEC$:FAR ;DISPLAY 16-BIT INTEGER EXTRN PUTDC32$:FAR EXTRN PUTSTRNG:FAR ;DISPLAY CHARACTER STRING EXTRN PAUSE:FAR ;PAUSE SCREEN ;============================================================================== ; ; STACK SEGMENT DEFINITION ; .STACK 256 ;============================================================================== ; ; CONSTANT SEGMENT DEFINITION ; .DATA NUM DW ? CONSTANTDIV DB 2 COUNTER DW 0 PROMPT DB 13,10,'PLEASE ENTER A POSITIVE NUMBER: ' LENGTHS DB 'LENGTH OF SEQUENCE IS: ' ERROR DB 'FLOATING POINT ERROR' SPACE DB ' ' ;============================================================================== ; ; CODE SEGMENT DEFINITION ; .CODE ASSUME DS:NOTHING,ES:DGROUP ULAMSEQ: MAIN PROC ;BEGINNING OF PROCEDURE MOV AX,DGROUP MOV ES,AX MOV DS,AX CALL CLEAR LEA DI,PROMPT MOV CX,34 CALL PUTSTRNG CALL GETDEC$ CALL NEWLINE START_LOOP: ;LOOP BEGIN SUB DX,DX MOV BH,0 CALL PUTDEC$ MOV NUM,AX ;MAKE SURE VALUE IN AX IS NOT ALTERED LEA DI,SPACE;FORMAT THE NUMBER LINE MOV CX,1 CALL PUTSTRNG INC COUNTER CMP AX,1 ;MAKE SURE DECIMAL IS GREATER THAN 1 JLE END_LOOP;VALUE IS EQUAL OR LESS JUMPS OUT OF LOOP ;MOV BX,2 DIV CONSTANTDIV;MATH COMPUTATION IF EVEN OR ODD CMP DX,0 ;IF EVEN GOES TO START LOOP OVER CLI JE START_LOOP JMP DOODD ;IF ODD JUMPS TO DO ODD ARITHMETIC DOODD: ;BEGIN FOR ODD ARITHMETIC MOV AX,NUM MOV BX,3 MUL BX INC AX JC ERROR_MESSAGE;CHECK FOR FLOATING POINT ERROR JMP START_LOOP ;OTHER JUMPS BACK TO LOOP ERROR_MESSAGE: ;PRINTS OUT ERROR MESSAGE CALL NEWLINE; LEA DI,ERROR;PROCEDURE JUMP OUT OF LOOP AND END PROGRAM MOV CX,20 ;IF A FLOATING POINT OCCURS CALL PUTSTRNG JMP DONE END_LOOP: ;END LOOP MOV AX,COUNTER;MOV COUNTER TO AX REGISTRY FOR PRINT CALL NEWLINE LEA DI,LENGTHS;PRINTS LENGTH OF PROGRAM MOV CX,23 CALL PUTSTRNG CALL PUTDEC CALL NEWLINE LEA DI,SPACE MOV CX,1 CALL PAUSE DONE: MOV AX,4C00CH;RETURN TO DOS INT 21H MAIN ENDP END ULAMSEQ
** Edit **

New Topic/Question
Reply



MultiQuote




|