; SERIES.ASM ; ; Input two numbers and output all integer values between those numbers. ; Original concept and I/O library by Alan Pinck. ; ; This shows how one might translate some ; Little-Man mnemonic codes (LMC) into Intel mnemonic codes. ; ; See: http://elearning.algonquincollege.com/coursemat/pincka/dat2343/lect054.htm ; for the original algorithm. ; ; Prompts have been added to tell the user to enter each number. ; ; The comments are the LMC codes used to implement the algorithm. ; ; -IAN! idallen@ncf.ca November 1999 ;---------------------------------------------------------------------- Series segment assume CS:Series,DS:Series org 100h ; .COM requires this ;---------------------------------------------------------------------- start: ; clear the DOS screen ; mov dx,offset cls ; clears the screen: ESC [ J mov ah,09h ; print ASCII$ string, pointer in DX int 21h ; prompt for the first number ; mov dx,offset first mov ah,09h ; print ASCII$ string, pointer in DX int 21h ; * Get the first number into "small" ; IN ; STO small ; call getnum jc error ; carry bit is set by getnum on error mov small,ax ; save first number in memory ; prompt for the second number ; mov dx,offset second mov ah,09h ; print ASCII$ string, pointer in DX int 21h ; * Get the second number into "big" ; IN ; STO big ; call getnum jc error ; carry bit is set by getnum on error mov big,ax ; save second number in memory ; * Test to make sure that "small" is below "big" ; LDA big ; SUB small ; SKN ; JMP ok ; mov ax,small cmp ax,big ; compare small (in AX) with big jbe ok ; jump around if small <= big ; * Ooops: small > big; must swap small and big ; LDA small ; STO temp ; LDA big ; STO small ; LDA temp ; STO big ; mov bx,big ; now AX=small and BX=big mov big,ax ; store small into big mov small,bx ; store big into small ok: ; * Increment small by one before starting loop ; LDA small ; ADD one ; STO small ; mov ax,small add ax,1h mov small,ax while: ; * See if small >= big and jump out if true ; LDA small ; SUB big ; SKN ; JMP endw mov ax,small cmp ax,big ; compare small with big jae endw ; jump out if small is above or equal ; * Output this number ; LDA small ; OUT ; mov ax,small ; number must be in AX call shownum ; see INCLUDE statement, below ; * Increment small by one and retry the loop ; ADD one ; STO small ; JMP while ; add ax,1h mov small,ax jmp while endw: done: ; * We're done. End the program: return to DOS ; HLT ; mov al,0h ; return 0 code in AL mov ah,4Ch ; code for "terminate program" int 21h ; * Error message for when getnum fails ; error: mov dx,offset errmsg mov ah,09h ; print ASCII$ string, pointer in DX int 21h jmp done ;---------------------------------------------------------------------- ; Data and variables down here. ; small dw ? big dw ? cls db 27,'[','J' db "$" errmsg db "Unrecognized Input Number" db "$" first db "Enter first number :" db "$" second db "Enter second number :" db "$" ;---------------------------------------------------------------------- include dec_IO.pkg Series ends end start ; "start" is the label on the first instruction