2002-11-30, 02:39
  #1
Medlem
r det mjligt att skapa arrayer i asm?
och en grej till: hur gr man fr att lgga ihop 2 .asm filer till en .exe fil
allts sga att jag har en main.asm och en util.asm (fr att inte main.asm ska bli fr stor) hur gr jag fr att anropa en rutin i util.asm frn main.asm? (Min compiler r TASM 5..)

//law
Citera
2002-11-30, 10:46
  #2
Medlem
Yup, gr utmrkt att gra arrayer i asm.

arr db 25 dup(0)

skapar en array som heter arr, r 25 bytes stor och fylls med 0. db str fr define byte, s arrayen kommer att best av bytes. Anvnd dw eller dd fr words eller doublewords. Arrayer i asm r *alltid* 0 baserade, du kan inte definera en array som brjar p 1 (till exempel).

Fr att f din util.asm fristende, kan du bara klippa ut dom rutiner osv som du vill ska ligga i den, och sen kra

"include util.asm" i main.asm filen (utan ""). Den fr dock inte ha ngra headers (typ .code osv, utan bara innehlla kod). Koden som ligger i den filen kommer att lggas in av kompilatorn p den platsen dr du skriver include raden. Tnk p att den mste ligga ovanfr (i filen) stllen som anropar rutiner som finns i util.asm filen.

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

Tackar!

//law
Citera
2002-11-30, 15:07
  #4
Medlem
Nu r det ju s att det funkar lite speciellt med arrayer i asm...

Fr att komma t ett vrde, mste du antingen anvnda en konstant (inte en variabel), eller ett av fljande register: BX, SI, DI, BP (BP har dock SS som standard segment, s vill du komma t arrayen i DS mste du anvnda DS:[BP]). BX och BP gr ven att kombinera med SI och DI (BX+SI), och du kan ven lgga 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 fljande , och vill komma t vrdet i arrayen som index pekar p (index lr vl ndras nnstans 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 gr det igenom, men det fr inte den effekt man tnker sej)

om du istllet vill anvnda BP, blir det

mov al,DS:[BP+arr]

Vill du anvnda dej av en konstant position i arrayen kan du antingen gra

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