int 21h функция 42h
Понадобилось считать кусочек файла с произвольным доступом к оному.Из файла считывается какое то количество символов,а потом должен перемещаться указатель файла назад и считываться еще некоторое еоличество символов.Но почему то после сдвига файл снова не читается.При сдвиге нет ошибки (флаг cf=0) при чтении с файла тоже нет ошибки(флаг cf=0),но при чтении после сдвига в ax почему то возвращается 0.Хотя я точно знаю что файл конца не достиг.
Почему так может быть?
кусочек кода:
mov ah,42h
mov al,00h
mov bx,Hfile
mov cx,0h
mov dl,[pos_hex]
int 21h
mov cx,4
lea dx,str_buff
cycle:
push cx
xor ax,ax
mov ah,3fh
mov bx,Hfile
mov cx,1h
int 21h
inc dx
pop cx
loop cycle
ret
pos_hex - позиция указателя в файле,вне процедуры переменная увеличивается и здесь ошибки точно нет,в функцию передается верное значение.Пробовал закрывать файл,что бы указатель сместился на 0 а потом его сдвигать вперед и все равно не читает.Пробовал в 42h функции в dl заносить отрицательное число,указатель сдвигался,но чтения не происходило.
mov ah,42h
mov al,00h
mov bx,Hfile
mov cx,0h
mov dl,[pos_hex] ; а что в dh лежит? Вроде используется пара CX:[SIZE="4"]DX[/SIZE]
int 21h
mov cx,4
lea dx,str_buff
cycle:
push cx
xor ax,ax
mov ah,3fh
mov bx,Hfile
mov cx,1h
int 21h
inc dx
pop cx
loop cycle
ret
P.S. Чего в Студентов-то запостил? Нормальный вопрос, без халявы :)
я так понял это от текущей позиции в сторону начала.но почему то такое не прокатило,оно от начала переместило на DX позиций.
как работает
я не совсем понял.кажется указатель переходит от текущей позиции на DX вперед.
Вобще есть способ что бы переместить указатель от текущей позиции на N-е количество назад?
P.S. Чего в Студентов-то запостил? Нормальный вопрос, без халявы :)
Это кусок моей лабораторки,вроде как к студенчеству относится :)
al=1 - переместить от текущей позиции.
Во-вторых, повторяю вопрос lerkin'а: Что у тебя в dh?
В третьих, проверь после выполнения, не установлен ли флаг CF(при помощи операторов JC, JNC, например) и посмтри, что попало в AX(1 - неверный режим, 6 - неверный дескриптор файла).
ничего,тоесть 0.я перед этим dh ксорил.
флаг CF не установлен,ошибки нет.в AX попадает текущая позиция указателя в файле.
в принципе я разобрался с механизмом работы этой функции,ошибки она не вызывает,ну,практически не вызывает,только напряжно постоянно передвигать указатель вперед от начала файла,можно ли его от текущей позиции назад передвинуть?
В процессе отладки появились какие то странности,подозреваю, что это турбо дебаггер шалит.
после выполнения инструкции mov cx,0h в cx заносится CC00h.
заменил mov на xor,но после вызова прерывания,почему то какое то время в ax возращалось CC00h,я точно проверил,что cx перед вызовом был пуст а в dx число не больше 10,да и не может вернуться указатель в файле равный CC00h,файл всего из 10 букв, при этом флаг CFбыл равен нулю.Посоветуйте хороший 16ти битный отладчик.
;)
Где связь?как он при выполнении mov cx,0h в регистр попал?
в принципе я разобрался с механизмом работы этой функции,ошибки она не вызывает,ну,практически не вызывает,только напряжно постоянно передвигать указатель вперед от начала файла,можно ли его от текущей позиции назад передвинуть?
Клади в CX: DX отрицательное значение.
Lerkin,wanja - спасибо,в будущем не буду так тупить.