[asm]EOF

0

Jak sprawdzićw asmie czy nastąpił koniec pliku?

0

Tak samo jak w innych językach.

Jeśli w pętli odczytujesz n bajtów, to jeśli funkcja odczytująca zwróci liczbę < n to masz koniec.

A jeśli nie odczytujesz i chcesz sprawdzić, czy wewnętrzny kursor jest na końcu to porównaj aktualną pozycję z rozmiarem pliku.

0

Te sposoby, które mi podałeś wykorzystują długość plików, a ja mniej więcej <ort>chcĘ</ort> zrobić tak
1.Wczytuj znak
2.Jeżeli znak to koniec pliku to THE END
3.Jeżeli nie to idź na początek

Problem jest tylko z określeniem jaki znak odpowiada za koniec pliku. W C++ było to EOF.

0

Jak w C++ wykorzystujesz do tego EOF no to sorry... Po co to nie wiem.
Normalnie robi się to tak:

while (ile = ReadFile(...))
{//tu obsłuż odczytane dane
}

Więc w Assemblerze zrób tak samo.

Read:
call ReadFile   ;zwróci liczbę odczytanych bajtów
or al,al        ;test, czy al == 0
jz KoniecPliku
call DoSomethingWithData
jmp Read
KoniecPliku:
call DoSomethingElse
0

Ale skąd mam wiedzieć, że właśnie natrafiłem na koniec pliku??? Muszę porównać:

cmp znak, koniecpliku

Ale jaką wartość ma stała koniecpliku?

0

Nie nie nie!!

Nie ma czegoś takiego jak znak końca pliku (pomijam pliki tekstowe, dla których jest to wartość 0x1b).

Po prostu funkcja, która odczytuje dane z pliku zwraca ile bajtów wczytała. I teraz jeśli każesz jej odczytać 1 bajt, to ona będzie zwracała wartość 1 aż dojdzie do końca pliku i wtedy zwróci wartość 0. I Ty właśnie porównujesz z zerem to, co ta funkcja zwróci. Jak 0 to koniec pliku.

0

Nie ma czegoś takiego jak znak końca pliku (pomijam pliki tekstowe, dla których jest to wartość 0x1b)

hmpf myślałem, że nie tylko tekstowe :-)

Co to znaczy, że przerwanie zwróci aktualną pozycję pliku w DX:AX? To w końcu w DX czy AX?

0

Co to znaczy, że przerwanie zwróci aktualną pozycję pliku w DX:AX? To w końcu w DX czy AX?

Rejestry AX i DX są 16-to bitowe. Gdyby pozycja w pliku zwracana była tylko w jednym z nich to maksymalną wielkością pliku byłoby 216 = 65536 bajtów.
Natomiast max. wielkość pliku to 232 = 4GB. A to dlatego, że pozycja zwracana jest jako liczba 32 bitowa. Starsze 16 bitów w DX a młodsze w AX. Więc wielkość (pozycja) pliku obliczysz tak:
Pozycja = DX*216+AX

0

A dlaczego ci co wymyślali przerwania nie użyli do tego rejestru 32-bitowego, np. EAX?

0

A dlaczego ci co wymyślali przerwania nie użyli do tego rejestru 32-bitowego, np. EAX?

Ech... bo wtedy procesory były 16-to bitowe i nie było takich rejestrów.
Poczytaj historię komputerów bo widzę, że brakuje Ci podstaw.

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