Language DEBUG
(Interactive Assembly)
Date: | 02/05/06 |
Author: | Han ten Have |
URL: | n/a |
Comments: | 3 |
Info: | n/a |
Score: | ![]() |
F100 400 0 A ; DEBUG source program 5 Feb 2006 ; ; for 99-BOTTLES-OF-BEER by Han ten Have ; ; ; Surprisingly so far after > 880 others nobody used the ; language for which the creating program is the most ; World-Widely available : DEBUG.EXE It came with early ; DOS versions as DEBUG.COM and now comes with Windows-XP ; There is no special language-packet needed, so : ; ; MOST PC OWNERS CAN RUN THIS PROGRAM IMMEDIATELY ! ; ; The downloadable version can be used unmodified as ; input file with all DOS and Windows versions. It tells ; first time users of the Command Prompt and DEBUG how at ; the file end. The program displays 5 verses at a time. ; Press any key for the next 5 , and <Esc> exits. ; ; Questions and comments welcome at progfun@hotmail.com ; ;---------------------------------------------------------- ; ; Intermediate Language : ; ; A tiny, dedicated "beer"-language was created. ; The data in the e (enter) commands show the essence of ; the 99-bottles-of-beer problem clearly, noting that : ; d a represent hex data bytes for CR LF since all is ; hex in DEBUG country, no clumsy 0xd or 0Dh formats ! ; And 'Text' is DEBUG's way for entering ASCII strings. ; Five e-commands are used to avoid line breaks in what ; really is only one string of 195 characters. ; ; For each verse the program scans a universal text and ; displays only the parts appropriate for the bottle ; count of the moment. For this an IF THEN ELSE END ; construct was needed of which the ELSE part can ; contain another IF THEN ELSE END. For the IF part ; only two fixed tests were sufficient and therefore all ; parts could be condensed into only one character each : ; ; '=' IF counter = "00" THEN ; '#' IF counter # "01" THEN ; '/' ELSE ; '|' END ; '(' ELSE (internally nested) ; ')' END " " ; '%' DISPLAY bottle-counter if not "00" ; '*' COUNT down or loop from "00" to "99" e1a9 d a'%=No more| bottle#s| of beer on the wall' e1d3 ', %=no more| bottle#s| of beer.'d a e1f4 '=Go to the store and buy some more' e216 '(Take #one/it| down and pass it around)' e23d ', *%=no more| bottle#s| of beer on the wall.'d a 0 A100 ;---------------------------------------------------------- ; ; DH keeps 2 scan-control flags : bit0 Skip, bit1 Brackets ; MOV CX,3939 ; init beerbottle-counter to ASCII "99" MOV BX,5 ; init verses counter to 5 MOV SI,1A9 ; init data pointer to 1A9 MOV DH,0 ; clear scan-control flags LODSB ; LOaDStringByte : MOV AL, [SI] ; INC SI CMP AL,0 ; 0 terminates data JZ 115 CALL 124 ; tests on flags and chars JMP 10B DEC BX JNZ 106 MOV AH,8 ; DOS-read-keyboard-no-echo INT 21 CMP AL,1B ; <Esc> exits the endless loop JNZ 103 MOV AH,0 ; DOS-terminate-program INT 21 ; TEST DH,1 ; Skip-flag JNZ 18F CMP AL,25 ; '%' DISPLAY JNZ 143 CMP CH,30 JZ 13D ; no leading '0' MOV DL,CH CALL 18A ; write char in DL MOV DL,CL CALL 18A ; write char in DL RET CMP CL,30 JNZ 137 RET CMP AL,2A ; '*' COUNT JNZ 15B CMP CL,30 JZ 14E DEC CX RET MOV CL,39 CMP CH,30 JZ 158 DEC CH RET MOV CH,39 ; re-inited to "99" RET CMP AL,3D ; '=' IF counter = "00" THEN JNZ 169 CMP CX,3030 JZ 168 OR DH,1 ; set Skip-flag , cleared by '|' '/' '(' RET CMP AL,23 ; '#' IF counter # "01" THEN JNZ 174 CMP CX,3031 JZ 165 RET CMP AL,7C ; '|' END JZ 173 CMP AL,29 ; ')' END (nested) JZ 173 CMP AL,2F ; '/' ELSE JZ 165 CMP AL,28 ; '(' ELSE (nested) JNZ 188 OR DH,3 ; set BOTH flags : Skip and Brackets RET ; Only cleared by ')' MOV DL,AL MOV AH,2 ; DOS-write-char-in-DL INT 21 RET ; TEST DH,2 ; 18F: Entry point when Skip-flag is ON JZ 19C CMP AL,29 ; ')' END (nested) JNZ 19B AND DH,FC ; 198: clear both flags RET ; CMP AL,28 ; '(' ELSE (nested) JZ 198 CMP AL,2F ; '/' ELSE JZ 198 CMP AL,7C ; '|' END JZ 198 RET ; keep skipping ; ; End of code, data was already placed hereafter at 1A9. ;---------------------------------------------------------- ; CHECK : Above is only one line with '-' characters. ; ; Note : This file had its comment lines reduced to 79 ; char's to stop old versions of DEBUG from ; beeping for minutes when chewing on it, but ; the result was still OK ! (DOS3.30 Mar 1987) ; Note : This file had its lines reduced again to 59 ; char's because sending it via E-mail as an ; attachment today (Jan 2006) had its contents ; modified by inserting extra linefeeds and ; therefore making it useless as source-file ! ; ; View this file with NotePad ; QUICK METHOD ; ; to RUN the DEBUG99.COM program under Windows-XP ; ; ; -Follow the naming and typing instructions precisely- ; ; 1. Place a copy of this file on the ; DeskTop and make sure its name is : DEBUG99.txt ; ; Renaming can be done via the menu which appears ; after right-clicking on the icon of the file. ; ; 2. With the mouse go to Start/Programs/Accessories/ ; System Tools/Command Prompt- and click on it. ; ; 3. In the now appearing window, after the > type ; ; DEBUG<DeskTop\DEBUG99.txt and press Enter. ; ; 4. When you see the > prompt again, read points ; 5. and 6. first, memorize them and only then ; ; type DEBUG99 and press Enter. ; ; 5. The program should display the first five verses ; now. Press the spacebar for the next five and so ; on. Keep pressing until the interesting part ; below 10 bottles and somewhat further appears ; and check the variations. ; ; When seen enough press the Esc-key to exit. ; ; 6. After the > prompt type exit and press Enter ; to leave the window. ; ;---------------------------------------------------------- ; A fully BLANK LINE ends the A (Assembly) command : rbx 0 rcx 16c nDEBUG99.com w q
Download Source | Write Comment
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments
Very nice work, from the coding, to the comments, to the output!
3.77 score * 26 votes - 3.88 * 25 =
= 98.02 - 97.00 = 1.02 star.
This means the last voter gave my program only 1 star !
Although I promise I won't be angry if someone does
not agree that it deserves the first place in the
assembly catagory that it takes up now for a few
weeks - thanks barrym for your positive comment that
gave it more attention after it had been mostly
ignored for years ! - and I myself think that
"Citizen Kane" is one of the worst movies ever made
while about everybody else says it's the best,
I am really curious : WHY ???
Will the 26th voter please step up and tell me !
simply a jealous reaction from an author farther down on the list. No sane person
could legitimately call a program that correctly prints the song as efficiently as
this one anything less than 'good'.