; Guide to Assembly Language
    ; Section 10.10 Complete Program
    ; Copyright 2019, James T. Streib
    .686
   .model flat, c
   .stack 100h

   printf    PROTO arg1:Ptr Byte, printlist:VARARG

   .data
   msg1fmt  byte 0Ah,"%s",0Ah,0Ah,0
   msg2fmt  byte " %3.1f",0Ah,0
   msg1     byte "Array",0
   n        sdword 5
   array    real8 1.0, 2.3, 3.7, 4.9, 5.1

   .code
main proc
   
   INVOKE printf, ADDR msg1fmt, ADDR msg1
   lea esi,array
   mov ecx,n
   .repeat
   push ecx
   INVOKE printf, ADDR msg2fmt, real8 ptr [esi]
      pop ecx
   add esi,8
   .untilcxz

   INVOKE printf, ADDR msg1fmt, ADDR msg1
   mov ebx,0
   mov ecx,n
   .repeat
   push ecx
   INVOKE printf, ADDR msg2fmt, array[ebx]
   pop ecx
   add ebx,8
   .untilcxz

   ret
main endp
   end