Jak użyć tej funkcji 42h aby sprawdzić jaki jest ostatni znak pliku? (używam nasma)
Potrzebny później do przeglądnięcia całego pliku w pętli czytając go znak po znaku.
To wiem jaką ma składnie, ale dokładnie jak się to używa. Gdy robię coś takiego
mov ah, 3dh
mov dx, nazwa ;czytanie pliku
mov al, 2
int 21h
jc blad
mov bx, ax ;uchwyt
mov ah, 42h ;ustawienie wskaźnika
mov al, 2
mov dx, -1
int 21h
jc blad
mov ah, 3fh
mov cx, 1
mov dx, 1
int 21h
jc blad
mov ah, 40h
mov cx, 1
mov dx, bufor
int 21h
jc blad
mov ah, 3eh
int 21h
po takiej operacji powstaje mi ogromny plik zawierający same śmieci
cx:dx offset ze znakiem, cx starsze słowo co tam masz?
W al mam ustawienie wskaźnika na koniec pliku. A dx, -1 (według specyfikacji może być ujemny) przesuwam się wstecz o jeden znak i go czytam w następnej instrukcji, i o to mi tu chodzi czy to jest poprawne.
czy ja pisałem po chińsku?
więc ta linijka mov dx, -1
jest mi nie potrzebna tak?
teraz gdy zrobię coś takiego
mov ah, 3dh
mov dx, nazwa
mov al, 2
int 21h
mov bx, ax
mov ah, 42h
mov al, 2
;mov dx, -1
int 21h
push cx
mov ah, 42h
mov al, 0
int 21h
pop cx
petla:
push cx
mov ah, 3fh
mov cx, 1
mov dx, bufor
int 21h
xor byte [bufor], 0ffh
mov ah, 40h
mov cx, 1
mov dx, bufor
int 21h
pop cx
loop petla
mov ah, 3eh
int 21h
nic nie pomaga
To wiem jaką ma składnie
nie sądzę
to jest od początku pliku
MOV BX, AX
MOV AH, 42h
MOV AL, 0
MOV CX, 0
MOV DX, 20
INT 21h
a od końca?
MOV BX, AX
MOV AH, 42h
MOV AL, 2
MOV CX, 0
MOV DX, -2
INT 21h
i plik pewnie rośnie o 64 kB
nawet więcej :)
MOV BX, AX
MOV AH, 42h
MOV AL, 2
MOV CX, 0
MOV DX, 0
INT 21h
w AX mam wielkość pliku ale jak ją przerzucę do cx i wykonam pętle (po drodze przestawiam znacznik na początek pliku), to otrzymuje już miejszy plik ale dalej za duży
udało mi się to zrobić
MOV BX, AX
MOV AH, 42h
MOV AL, 2
MOV CX, -1
MOV DX, -1
INT 21h
ale nic z tego nie będzie ponieważ gdy znajdę ostatni znak w pliku to nie znaczy że ten znak nie będzie gdzieś wcześniej i może nie przeglądnąć całego pliku jest inny sposób aby przejrzeć cały plik?
Zobacz co masz w dx:ax
Napisałem o tym wyżej ale zrobię to w inny sposób, funkcja 3fh zwraca w rejestrze AX 0 gdy doszło się do końca pliku i to już wystarczy