← Uz sākumu

99 bottles of beer

2003. gada 28. janvārī, komentāru vēl nav

Šis ieraksts 18 gadu laikā ir kļuvis par laika upuri sekojošo iemeslu dēļ:

  • Viena vai vairākas saites vairs neeksisstē, bet man ir izdevies atrast arhīva kopiju. Pie tām ir 💾 (diskete)

Šis blogs ir sens, un nekas nav mūžīgs. Saites mēdz pazust, mani uzskati mēdz mainīties, flešs mēdz nomirt. Cenšos atzīmēt un pielabot, bet ierakstu ir tik daudz...

Kurš gan programmētājs nezin šo maģisko frāzi? Ja nezini, tad tūdaļ, tūdaļ. 99 bottles of the beer ir vienkārša hello world tipa programmiņa. Un tā ir uzrakstīta kā minimums 487 dažādās programmēšanas valodās.

; 99 Bottles of Beer program in Intel 8086 assembly language.
; Assemble to a .COM file for MS-DOS.
;
; Author: Alan deLespinasse
; aldel@alum.mit.edu
; www.aldel.com

code segment
assume cs:code,ds:code
org 100h
start:


; Main loop

mov cx, 99                    ; bottles to start with

loopstart:

call printcx                  ; print the number
mov dx,offset line1           ; print the rest of the first line
mov ah,9                      ; MS-DOS print string routine
int 21h

call printcx                  ; print the number
mov dx,offset line2_3         ; rest of the 2nd and 3rd lines
mov ah,9
int 21h

dec cx                        ; take one down
call printcx                  ; print the number
mov dx,offset line4           ; print the rest of the fourth line
mov ah,9
int 21h

cmp cx, 0                     ; Out of beer?
jne loopstart                 ; if not, continue

int 20h                       ; quit to MS-DOS


; subroutine to print CX register in decimal

printcx:

mov di, offset numbufferend   ; fill the buffer in from the end
mov ax, cx                    ; put the number in AX so we can divide it

printcxloop:
mov dx, 0                     ; high-order word of numerator - always 0
mov bx, 10
div bx                        ; divide DX:AX by 10. AX=quotient, DX=remainder
add dl,'0'                    ; convert remainder to an ASCII character
mov [ds:di],dl                ; put it in the print buffer
cmp ax,0                      ; Any more digits to compute?
je printcxend                 ; if not, end
dec di                        ; put the next digit before the current one
jmp printcxloop               ; loop

printcxend:
mov dx,di                     ; print, starting at the last digit computed
mov ah,9
int 21h
ret


; Data

line1 db ' bottles of beer on the wall,',13,10,'$'
line2_3 db ' bottles of beer,',13,10,'Take one down, pass it around,',13,10,'$'
line4 db ' bottles of beer on the wall.',13,10,13,10,'$'
numbuffer db 0,0,0,0,0
numbufferend db 0,'$'

code ends
end start

Tu atbildi augstāk redzamajam komentāram. Atcelt