функция 42h устанавливает позицию в файле относительно начала(al=0)/текущей позиции(al=1)/конца файла(al=2). относительное смещение указывается в паре регистров CX:DX(32 бита) и является знаковым - т.е. можно, например, сместиться на -2 байта относительно текущей позиции: al=1, cx:dx=-2{FFFFFFFE, т.е. cx=FFFF(-1), dx=FFFE(-2)} возвращенное функцией в регистрах DX:AX 32битное число есть смещение от начала, получившееся после позиционирования.
ты своим dec ax просто изменил число возвращенное функцией. позиция в файле от этого, очевидно, не меняется и остается по прежнему на конце файла, откуда прочитать ты ничего уже не можешь... чтобы поменять позицию в файле, нужно после твоего dec ax запихать это число опять в cx:dx и заново вызвать функцию позиционирования(только на этот раз - от начала файла):
| Код | read_duom1: mov ah,42h mov al,02h mov bx,[duom1_desc] xor dx,dx xor cx,cx int 21h jc close_duom1
dec ax mov cx,dx mov dx,ax
mov ah,42h mov al,00h mov bx,[duom1_desc] int 21h jc close_duom1 mov bx,[duom1_desc] mov ah,3fh mov cx,1 ;2h - определись, один тебе нужен байт или таки два... mov dx,offset duom1_buf int 21h jc close_duom1
|
или просто сразу установить позицию -1 от конца:
| Код | read_duom1: mov bx,[duom1_desc] mov ax,4202h mov cx,-1 ; FFFF mov dx,-1 ; FFFF ; полное число в паре CX:DX - FFFFFFFF, т.е. -1 int 21h jc close_duom1
mov ah,3fh mov cx,1 ;2h - определись, один тебе нужен байт или таки два... mov dx,offset duom1_buf int 21h jc close_duom1
|
|