2 błedy...

0

Od parunastu, albo i parędziesięciu minut próbuję rozwązać dwa problemy i wciąż zachodzę w głowę o co chodzi ;-( oto kody:

mov pLine[al], ds:[al+81h]

deklaracja pLine:

pLine    DB        ?

A błąd wywala taki:

Error plik.asm(15) Can't convert to pointer

cmp pLine[0], 0

pLine to samo co w powyższym ^^
A błąd wyskakuje taki:

plik.asm(20) Forward reference needs override

Z góry THX za pomoc ^^

0

Nie wiedziałem że można zrobić tyle błędów w jednej linijce :O. Już tłumacze :) po pierwsze jeden z argumentów MUSI być rejestrem. Czyli nie
cmp pLine[0], 0
tylko
mov al., 0
cmp pLine[0], al.

To samo tyczy się pierwszego błędu. Ale pierwszy aż w oczy kłuje :-P Ponieważ rejestr 8 bitowy nie może adresować pamięci czyli nie AL tylko AX, Ale AX z kolei nie jest używany przy adresowaniu pamięci więc znowu błąd :) do adresowani pamięci używa się rejestrów : BX, SI, DI <- to są te podstawowe można jeszcze parę innych czyli końcowy rezultat:

Mov al, ds:[bx+81h]
Mov pLine[bx], al.

A tak nawiasem mówiąc jeśli pLine używasz jako tablice to znowu błąd :) ponieważ jeśli zrobisz tak:
PLine db ?
WAZNA_DANA db 10
I odwołasz się do drugiego indeksu tablicy Pline to wejdziesz na WAZNA_DANA!!! Ponieważ pod pline zająłeś tylko bajt czyli jeden index <lol> a kolejny bajt to jest nasza ważna dana :) jeśli chcesz to ominąć to zadeklaruj Pline tak:
PLine db 100 dup(?) <- teraz nasza tablica ma sto elementów.....

0

ale coś jeszcze jest źle, bo w linijkach

mov pLine[bx],al

i cmp pLine[0], al

 wyskakuje błąd 
> Forward reference needs override
0

Linijki są 100% ok. :) widocznie używasz innego modelu pamięci tzn. ja używam Tinny. Jeśli tak to masz problem z definicją danych, powinny się znaleźć na początku programu, ponieważ odwoływanie ?do tyłu? nie zadziała. Jednym słowem u ciebie jest taka sytuacja:
.....
mov pline[0], al
......
pline db 100 dup(?);
.......

A powinno być:
.....
pline db 100 dup(?);
......
mov pline[0], al
.......
Teraz powinieneś wiedzieć o co biega :) Mała uwaga jeśli dane znajdują się wewnątrz kodu programu to MUSISZ je przeskoczyć ewentualnie nigdy do nich nie dojść !!! W innym wypadku dane zostaną potraktowane jako kod programu <lol> Ewentualnie możesz zadeklarować tablice jako pline db 100 dup(90h); wtedy nie będziesz musiał jej przeskakiwać, ale rozmiar pliku zwiększy się o 100 bajtów.

0

Od parunastu, albo i parędziesięciu minut próbuję rozwązać dwa problemy i wciąż zachodzę w głowę o co chodzi ;-(

O zgrozo - popędziłeś na forum po parunastu minutach?!?!?!?!?!?! [glowa]
To zamierzasz się nauczyć Assemblera, czy nie?
Ja kiedyś zapytałem po ponad 2 miesiącach szukania odpowiedzi... a Ty po kilkunastu minutach... you're my hero...

0

Z tym forward reference to dodam jeszcze, ze przy innym modelu niz tiny nie wystapi to, o ile umiescimy w sekcji danych przed kodem (jak juz wspomnialem). Zreszta blad ten zalezy jedynie od asemblera. Ja uzywajac FASM-a nie mam z tym problemu. W TASMie (bo czuje ze jego wlasnie uzywasz), na pewno jest mozliwosc poinformowania asemblera, ze jakiegos symbolu uzyjesz pozniej. Sprawdz w dokumentacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1