real language

Bookmarking Digg Diigo DZone Earthlink Google
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

Language Macro-10

(Dec PDP-10 Macro Assembler)

Author:Mark H. Zellers`
Score: (3.00 in 9 votes)
        TITLE BEER - 99 Bottles of beer on the wall
;	By Mark H. Zellers
;       This program emits the song 99-bottles of beer on the wall
;       It is a demonstration of PDP-10  assembly language
;       This program can be run on the SIMH emulator using the TOPS-10
;       Operating system.
;       For more information, see
;       Or consult Wikipedia for more information about the PDP-10


        ; Define some registers
        ; note that registers 0 and 1 are used for scratch
        N==2                    ; Register containing number of bottles
        D==3                    ; Digits to output
        E==4                    ; Ending (either take one down or go to the stor
        B==5                    ; "Bottles" or "Bottle"
        LC==6                   ; Either D or "no "
START:: MOVEI   N,^D99  ; Initialize number of bottles
        MOVEI   E, [ASCIZ /You take one down, pass it around, /]

; Convert the current count to a string
        MOVE    0,N
        IDIVI   0,^D10
        JUMPE   0,ONEDIG
        ROT     0,-7            ; Move high digit to first character
        ROT     1,^D-14         ; Move low digit to second character
        IOR     0,1             ; Merge the two characters together
        ADD     0,[BYTE (7)60,60,40,0,0]  ; Convert to ASCII and append a blank
        JRST    OUTPUT
        ROT     0, -7
        ADD     0,[BYTE (7)60,40,0,0,0]
OUTPUT: MOVE    D,0     ; Move result into digit buffer

; Use the appropriate ending for bottles
        MOVEI   B,[ASCIZ/bottles/]
        CAIN    N,1
        MOVEI   B,[ASCIZ/bottle/]

; Now check for whether we want the digits or the word no
        MOVEI   LC,D            ; Assume we want the digits
        JUMPN   N,PASSIT
        MOVE    D,[ASCIZ/No /]
        MOVEI   LC,[ASCIZ /no /]
        MOVEI   E,[ASCIZ /You go to the store and buy some more,/]

; Now output the strings
        CAIN    N,^D99  ; Skip repeat on first verse
        JRST    SKIPRP
        OUTSTR  0(LC)
        OUTSTR  0(B)            ; "Bottles" or "bottle"
        OUTSTR  [ASCIZ / of beer on the wall.

SKIPRP: OUTSTR  D               ; Number of bottles
        OUTSTR  0(B)            ; "Bottles" or "Bottle"
        OUTSTR  [ASCIZ/ of beer on the wall, /]
        OUTSTR  0(LC)           ; Number of bottles or "no"
        OUTSTR  0(B)
        OUTSTR  [ASCIZ/ of beer.
        OUTSTR  0(E)    ; Take one down or go to store

        SOJGE   N,LOOP          ; Decrement N and loop if N>=0
        OUTSTR  [ASCIZ/ 99 bottles of beer on the wall./]
        END START

Download Source | Write Comment

Alternative Versions


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!




Security Code: