funkcja 42h przerwania 21

0

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.

0

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

0

cx:dx offset ze znakiem, cx starsze słowo co tam masz?

0

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.

0

czy ja pisałem po chińsku?

0

więc ta linijka mov dx, -1 jest mi nie potrzebna tak?

0

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

0

To wiem jaką ma składnie

nie sądzę

0

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 
0

i plik pewnie rośnie o 64 kB

0

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

0

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?

0

Zobacz co masz w dx:ax

0

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

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