Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение атрибутов файла, 1 минута 
:(
    Опции темы
Promosoft
  Дата 29.5.2008, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.3.2008

Репутация: нет
Всего: нет



TASM 5
Нужно прочитать аттрибуты файла.
Вот пример чтения аттрибута (из книжки, скриншот страницы прилагается)
user posted image

В отладчике выдаёт Флаг CF=1 (ошибка) и AX=3 (или 2) (несуществующий путь).
Подскажи какую букву, что подправить, видимо детская ошибка, просто не вижу.

Код

masm
model small
.486
.stack 100h
.data
PATH        DB    "D:\FILE.TXT"
POINT_PATH    DD    PATH
.code
start:

               MOV  AX,4300H          ;Запрос на установку
               ;LEA  DX, PATH     ;ASCIIZ-строка
               LDS DX, POINT_PATH
               INT  21H             ;Вызов DOS
               JC EXIT            ;переход в случае ошибки на CX атрибуты
               
               EXIT:
                    ;error
     mov     ax, 4c00h
     int     21h               
end     start       


Это сообщение отредактировал(а) Promosoft - 29.5.2008, 03:43
PM MAIL   Вверх
ksili
Дата 29.5.2008, 04:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Может в пути надо слэш задвоить? - "D:\\FILE.TXT"



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
MAKCim
Дата 29.5.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Promosoft, 
уверен, что PATH находится в сегменте 0x0000
попробуйт так (не уверен в правильности реализации, т. к давно MASM не использовал)
Код

mov ax, SEG .data
mov ds, ax
lea dx, PATH

в конце PATH нужно поставить $ и заэкранировать слэш
Код

PATH        DB    "D:\\FILE.TXT", $



Это сообщение отредактировал(а) MAKCim - 29.5.2008, 09:01


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
dumb
Дата 30.5.2008, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(Promosoft @  29.5.2008,  04:41 Найти цитируемый пост)
Вот пример чтения аттрибута (из книжки, скриншот страницы прилагается)
"хорошая" книжка... smile в одном примере из пары строк столько ляпов. путь есть ASCIIZ-строка, т.е. должен заканчиваться 0. инструкция lds dx, POINT_PATH загружает в пару ds:dx указатель, содержащийся в POINT_PATH. но сама POINT_PATH по умолчанию адресуется через ds. т.е. если регистр ds не будет указывать на сегмент данных(а при старте .exe он указывает на PSP, а не на .data), то вгружать в ds:dx мы будем "мусор". а если ds будет правильно настроен на .data, то смысла перегружать его, используя команду lds, никакого - лучше просто загрузить смещение в dx.

Код

...
.data
PATH        DB    "D:\FILE.TXT", 0
.code
start:
    mov ax, @data
    mov ds, ax
               MOV  AX,4300H          ;Запрос на установку
               LEA  DX, PATH     ;ASCIIZ-строка
               INT  21H             ;Вызов DOS
...


ps. экранировать(удваивать) слэш не надо. smile
PM MAIL   Вверх
Promosoft
Дата 30.5.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.3.2008

Репутация: нет
Всего: нет



MAKCim, dumb, огромное спасибо, помогли.

Рядом встал другой вопрос:
После выполнения вышеперечисленного на выходе в регистр CX попадает набор байтов (атрибуты), но в самом регистре они хранятся далеко не в двоичном. Например в окне Watches регистр CX выглядет как:
Код

CX           word 39 <27h>

вопрос:
1) Как вытащить 27
2) Возможно ли сразу же преобразовать CX в двоичное значение?
PM MAIL   Вверх
586
Дата 31.5.2008, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 2
Всего: 146



Цитата(Promosoft @  30.5.2008,  17:36 Найти цитируемый пост)
После выполнения вышеперечисленного на выходе в регистр CX попадает набор байтов (атрибуты), но в самом регистре они хранятся далеко не в двоичном. Например в окне Watches регистр CX выглядет как

Как это? smile Регистр CX состоит из 2 байт = 16 бит.
биты: 7654 3210
27h = 0010 0111b
Выставлены атрибуты: только чтение, скрытый, системный, архивный.
Состояние битов проверяется так:
bt cx, <номер бита>
флаг СF - состояние бита.
PM   Вверх
Promosoft
Дата 31.5.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 24.3.2008

Репутация: нет
Всего: нет



Волшебная команда BT.
Спасибо.

Это сообщение отредактировал(а) Promosoft - 31.5.2008, 09:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.