Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

int 21h функция 42h

316
22 сентября 2009 года
Alm3n
889 / / 29.05.2009
Доброго времени суток.
Понадобилось считать кусочек файла с произвольным доступом к оному.Из файла считывается какое то количество символов,а потом должен перемещаться указатель файла назад и считываться еще некоторое еоличество символов.Но почему то после сдвига файл снова не читается.При сдвиге нет ошибки (флаг cf=0) при чтении с файла тоже нет ошибки(флаг cf=0),но при чтении после сдвига в ax почему то возвращается 0.Хотя я точно знаю что файл конца не достиг.
Почему так может быть?
кусочек кода:
Код:
xor ax,ax
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 заносить отрицательное число,указатель сдвигался,но чтения не происходило.
9
22 сентября 2009 года
Lerkin
3.0K / / 25.03.2003
Код:
xor ax,ax    ; нафиг?
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. Чего в Студентов-то запостил? Нормальный вопрос, без халявы :)
316
23 сентября 2009 года
Alm3n
889 / / 29.05.2009
Нашел тут описание функции на форуме:
Цитата:
AL = 0 переместить к началу файла + CX:DX


я так понял это от текущей позиции в сторону начала.но почему то такое не прокатило,оно от начала переместило на DX позиций.
как работает

Цитата:
AL = 1 переместить к текущей позиции + CX:DX

я не совсем понял.кажется указатель переходит от текущей позиции на DX вперед.
Вобще есть способ что бы переместить указатель от текущей позиции на N-е количество назад?

Цитата: Lerkin

P.S. Чего в Студентов-то запостил? Нормальный вопрос, без халявы :)


Это кусок моей лабораторки,вроде как к студенчеству относится :)

247
24 сентября 2009 года
wanja
1.2K / / 03.02.2003
al=0 - переместить от начала файла.
al=1 - переместить от текущей позиции.
Во-вторых, повторяю вопрос lerkin'а: Что у тебя в dh?
В третьих, проверь после выполнения, не установлен ли флаг CF(при помощи операторов JC, JNC, например) и посмтри, что попало в AX(1 - неверный режим, 6 - неверный дескриптор файла).
316
24 сентября 2009 года
Alm3n
889 / / 29.05.2009
Цитата: wanja
Что у тебя в dh?


ничего,тоесть 0.я перед этим dh ксорил.
флаг CF не установлен,ошибки нет.в AX попадает текущая позиция указателя в файле.

в принципе я разобрался с механизмом работы этой функции,ошибки она не вызывает,ну,практически не вызывает,только напряжно постоянно передвигать указатель вперед от начала файла,можно ли его от текущей позиции назад передвинуть?

В процессе отладки появились какие то странности,подозреваю, что это турбо дебаггер шалит.
после выполнения инструкции mov cx,0h в cx заносится CC00h.
заменил mov на xor,но после вызова прерывания,почему то какое то время в ax возращалось CC00h,я точно проверил,что cx перед вызовом был пуст а в dx число не больше 10,да и не может вернуться указатель в файле равный CC00h,файл всего из 10 букв, при этом флаг CFбыл равен нулю.Посоветуйте хороший 16ти битный отладчик.

535
24 сентября 2009 года
Нездешний
537 / / 17.01.2008
С помощью опкода 0xCC реализуется контрольная точка останова, так что
Цитата:
подозреваю, что это турбо дебаггер шалит

;)

316
24 сентября 2009 года
Alm3n
889 / / 29.05.2009
Цитата: Нездешний
С помощью опкода 0xCC реализуется контрольная точка останова, так что ;)


Где связь?как он при выполнении mov cx,0h в регистр попал?

247
25 сентября 2009 года
wanja
1.2K / / 03.02.2003
Цитата: Alm3n

в принципе я разобрался с механизмом работы этой функции,ошибки она не вызывает,ну,практически не вызывает,только напряжно постоянно передвигать указатель вперед от начала файла,можно ли его от текущей позиции назад передвинуть?


Клади в CX: DX отрицательное значение.

316
25 сентября 2009 года
Alm3n
889 / / 29.05.2009
Жаль что я уже написал лабу с перемещением указателя от начала файла,ваши советы бы гораздо укоротили программу.
Lerkin,wanja - спасибо,в будущем не буду так тупить.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог