Vinnaren i pepparkakshustävlingen!
2002-11-30, 02:39
  #1
Medlem
är det möjligt att skapa arrayer i asm?
och en grej till: hur gör man för att lägga ihop 2 .asm filer till en .exe fil
alltså säga att jag har en main.asm och en util.asm (för att inte main.asm ska bli för stor) hur gör jag för att anropa en rutin i util.asm från main.asm? (Min compiler är TASM 5..)

//law
Citera
2002-11-30, 10:46
  #2
äldre konto (old)
Ej medlem
Yup, går utmärkt att göra arrayer i asm.

arr db 25 dup(0)

skapar en array som heter arr, är 25 bytes stor och fylls med 0. db står för define byte, så arrayen kommer att bestå av bytes. Använd dw eller dd för words eller doublewords. Arrayer i asm är *alltid* 0 baserade, du kan inte definera en array som börjar på 1 (till exempel).

För att få din util.asm fristående, kan du bara klippa ut dom rutiner osv som du vill ska ligga i den, och sen köra

"include util.asm" i main.asm filen (utan ""). Den får dock inte ha några headers (typ .code osv, utan bara innehålla kod). Koden som ligger i den filen kommer att läggas in av kompilatorn på den platsen där du skriver include raden. Tänk på att den måste ligga ovanför (i filen) ställen som anropar rutiner som finns i util.asm filen.

Hehe, blev kanske lite luddigt, plus att det var ett tag sen jag höll på med asm.
Citera
2002-11-30, 13:22
  #3
Medlem
nej det är lugnt jag fattade det mesta. men när jag anropar dom som blir det [arr+(array nummer)] där (array number är ett nummer mellan 1-25?

Tackar!

//law
Citera
2002-11-30, 15:07
  #4
äldre konto (old)
Ej medlem
Nu är det ju så att det funkar lite speciellt med arrayer i asm...

För att komma åt ett värde, måste du antingen använda en konstant (inte en variabel), eller ett av följande register: BX, SI, DI, BP (BP har dock SS som standard segment, så vill du komma åt arrayen i DS måste du använda DS:[BP]). BX och BP går även att kombinera med SI och DI (BX+SI), och du kan även lägga till en konstant (BX+1 eller BX+SI+1).

Sedan är arrayer 0 baserade, dvs definierar du en array som DB 25 dup(0), kommer man åt den med 0-24.

Så... Om du har följande , och vill komma åt värdet i arrayen som index pekar på (index lär väl ändras nånstans i koden...)

arr DB 25 dup(0)
index DW 0
...
mov bx,index
mov al,[bx+arr] (eller "mov al,arr[bx]", det är vilket som...)

(mov al,[index+arr] fungerar alltså inte... i vissa kompilatorer går det igenom, men det får inte den effekt man tänker sej)

om du istället vill använda BP, blir det

mov al,DS:[BP+arr]

Vill du använda dej av en konstant position i arrayen kan du antingen göra

plats EQU 5
mov al,[arr+plats] (eller "mov al,arr[plats]")
eller
mov al,[arr+5] (mov al,arr[5])

Heh, hoppas det blev lite klarare
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in