'===========================================================================
' Subject: Using arrays via inline ASM        Date: 03-16-03 (  :  )       
'  Author: Rick Lett                          Code: XPBASIC                
'  Origin: xpbbasic@xpbbasic.com            Packet: XPBASIC.ABC
'===========================================================================
' Using arrays via inline asm by Rick Lett
' http://www.xpbbasic.com

Console 

DIM IN% 
DIM IN$ 
DIM T% 
DIM AMOUNT% 
DIM AMOUNT$ 
DIM NUM% 

Program 
' input how many numbers to place into memory 
Input "How many numbers in array?(up to 7):",AMOUNT$ 
AMOUNT% = VAL(AMOUNT$) 
FOR T% = 1 to AMOUNT% 
' use for/next loop and input numbers 
Input "Enter numbers: ",IN$ 
IN% = VAL(IN$) 
ASM_BEGIN 

   Data ; data block 
    
   IN_arr: db ? ; set up memory locations 
          db ? ; db means byte so can load one byte 
          db ? ; per location up to 255 
          db ? 
          db ? 
          db ? 
          db ? 
   stoparray 
    
   Code ; code block 
    
   MOV EBX,[T%] ; use EBX as counter 
   MOV AL,[IN%] ; move inputed numbers to lo byte of reg EAX 
   MOV [IN_arr+EBX],AL ; move byte into array 

ASM_END 
NEXT 

' get ready to display array numbers 
Print " To display Hit enter" 
WAITKEY 
CLS 
Locate 0,0 
Print "Numbers in array: " 
FOR T% = 1 to AMOUNT% 
ASM_BEGIN 
    
    
   MOV EBX,[T%] ; use EBX as counter 
   MOV AL,[IN_arr+EBX] ; move memory locations to EAX lo byte 
   MOV [NUM%],EAX ; move into variable location 
    
ASM_END 
' print out of memory location 
Print NUM% 
NEXT 
Locate 3,0 
Print "Size of array:" 
Locate 3,15 
Print AMOUNT% 
Waitkey 

End 
