Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Лунный пёс
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 12
1

Получить атрибуты файла, заданного в командной строке

09.11.2011, 16:32. Просмотров 1917. Ответов 7
Метки нет (Все метки)

Не создается com-файл. Пишет что то там с CS:IP не получилось) помогите найти ошибку
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.286
PROGRAM segment
        assume CS:PROGRAM
        org 80h
len     db ?
        db ?
FName   db ? 
    org 100h
jmp start
    msg1    db 10,13,'File is read only$'
    msg2    db 10,13,'File is hidden$'
    msg3    db 10,13,'System file$'
    msg4    db 10,13,'This file have attributes$'
    msg5    db 10,13,'Archive file$'
    msg6    db 10,13,'File is normal$'
    msg7    db 10,13,'File is compressed$' 
start:
    mov si,offset FName
    mov bx,0
    mov bl,len
    mov byte ptr[bx+si],0
 
    mov dx, offset FName
    mov al,0
    mov ah,43h
    int 21h
    mov bx,0
.386
    bt ax,bx
    jnc next1
    lea dx,msg1
next1:
    inc bx
    bt ax,bx
    jnc next2
    lea dx,msg2
next2:
    inc bx
    bt ax,bx
    jnc next3
    lea dx,msg3
next3:
    inc bx
    bt ax,bx
    jnc next4
    lea dx,msg4
next4:
    inc bx
    bt ax,bx
    jnc next5
    lea dx,msg5
next5:
    inc bx
    bt ax,bx
    jnc next6
    lea dx,msg6
next6:
    inc bx
    bt ax,bx
    jnc next7
    lea dx,msg7
next7:
 
program    ends
        end     start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 16:32
Ответы с готовыми решениями:

Получить размер файла, заданного в командной строке
Помогите найти ошибку! дано задание получить размер файла заданного в командной строке функциями...

TASM. Копирование указанного файла (имена исходного и результирующего файла задаются в командной строке)
Нашел программу, но не смог добиться работы от нее. Описание: Пример программы (в формате DOS...

Удаление файла, введённого в командной строке (Ассемблер)
Товарищи! Помогите пожалуйста решить задачу. Текст задачи: Написать программу ,которая удаляет...

Ввести текст из файла, имя которого задано в командной строке, и вывести на экран
Ввести текст из файла, имя которого задано в командной строке и вывести на экран. Текст занимает...

Вывести на экран атрибуты заданного файла
Разработать программу выводящую на екран атрибуты заданного файла. Если файла с введенным именем не...

7
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27445 / 18375 / 7273
Регистрация: 22.10.2011
Сообщений: 32,335
Записей в блоге: 6
09.11.2011, 17:52 2
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.286
PROGRAM segment
    assume CS:PROGRAM
    org 80h
len db ?
    db ?
FName   db ? 
    org 100h
start: ; <--- точка входа
    jmp init
    
        msg1    db 10,13,'File is read only$'
        msg2    db 10,13,'File is hidden$'
        msg3    db 10,13,'System file$'
        msg4    db 10,13,'This file have attributes$'
        msg5    db 10,13,'Archive file$'
        msg6    db 10,13,'File is normal$'
        msg7    db 10,13,'File is compressed$'
init:
        mov si, offset FName
        mov bx, 0
        mov bl, len
        mov byte ptr[bx+si], 0
; ...
1
Лунный пёс
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 12
09.11.2011, 20:07  [ТС] 3
ух как глупо) а я извелась) теперь com файл создается и даже программа работает но неправильно( почему то в любом случае выдает 2 первых сообщения, даже если атрибуты не такие
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
.286
PROGRAM segment
        assume CS:PROGRAM
        org 80h
 
FName   db ? 
    org 100h
 
start:
        jmp       InitProc
    msg1    db 10,13,'File is read only$'
    msg2    db 10,13,'File is hidden$'
    msg3    db 10,13,'System file$'
    msg4    db 10,13,'This file have attributes$'
    msg5    db 10,13,'Archive file$'
    msg6    db 10,13,'File is normal$'
    msg7    db 10,13,'File is compressed$' 
 
WriteCons  proc 
           push    ax
           mov     ah,09h
           int     21h
           pop     ax
           ret
WriteCons  endp
 
RCLine    proc
          xor bx, bx
          mov si, 80h     ; SI = смещение начала командной строки
          lodsb           ; Получим кол-во символов
          cmp al, 0
          je epic_Fail    ; Пустая ком. строка
          inc si          ; SI указывает на 1ый символ строки
Next_char:
        lodsb           ; Получаем очередной символ
        cmp al, 0Dh     ; Конец строки?
        je GetL         ; Да - на выход... 
        stosb           ; Нет - сохраним символ в переменной FName
        jmp  short Next_char    ; Следующий символ...
GetL:
        xor al,al       ;ASCII 0 в конец
        mov al, 0
    stosb
        mov al, '$'
        stosb
        clc                     ; Сбросим флаг переноса...
        jmp     GoNext
epic_Fail:
        mov bl, 1
GoNext:
        ret                     ; Выходим из процедуры
RCLine endp
 
 
 
InitProc:
    
 
     mov di, offset FName    ; ES:DI = адрес FName
       
        call RCLine     ; Вызываем процедуру чтения параметров командной строки
    mov al,0
    mov ah,43h
    int 21h
    mov bx,0
.386
    bt ax,bx
    jnc next1
    lea dx,msg1
        call WriteCons
next1:
    inc bx
    bt ax,bx
    jnc next2
    lea dx,msg2
        call WriteCons
next2:
    inc bx
    bt ax,bx
    jnc next3
    lea dx,msg3
        call WriteCons
next3:
    inc bx
    bt ax,bx
    jnc next4
    lea dx,msg4
        call WriteCons
next4:
    inc bx
    bt ax,bx
    jnc next5
    lea dx,msg5
        call WriteCons
next5:
    inc bx
    bt ax,bx
    jnc next6
    lea dx,msg6
        call WriteCons
next6:
    inc bx
    bt ax,bx
    jnc next7
    lea dx,msg7
        call WriteCons
next7:
        ret
program    ends
        end     start
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27445 / 18375 / 7273
Регистрация: 22.10.2011
Сообщений: 32,335
Записей в блоге: 6
09.11.2011, 21:01 4
Я что-то не пойму, ты где передаешь указатель на имя файла? Он должен лежать не в ES:[DI], а в DS:[DX]. То есть, тебе надо DS настроить на тот же сегмент (там же, в ASSUME), и потом смещение имени занести в DX. Это было первое. Второе: результат (набор флагов) эта функция возвращает не в AX, а в CX (Информация к размышлению ), так что поправь это тоже...
1
09.11.2011, 21:01
Лунный пёс
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 12
09.11.2011, 22:35  [ТС] 5
эх все равно зараза не выходит((( выдает теперь все сообщения подрят.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
.286
PROGRAM segment
        assume CS:PROGRAM, DS:PROGRAM
        org 80h
 
FName   db ? 
    org 100h
 
start:
        jmp       InitProc
    msg1    db 10,13,'File is read only$'
    msg2    db 10,13,'File is hidden$'
    msg3    db 10,13,'System file$'
    msg4    db 10,13,'This file have attributes$'
    msg5    db 10,13,'Archive file$'
    msg6    db 10,13,'File is normal$'
    msg7    db 10,13,'File is compressed$' 
 
WriteCons  proc 
           push    ax
           mov     ah,09h
           int     21h
           pop     ax
           ret
WriteCons  endp
 
RCLine    proc
          xor bx, bx
          mov si, 80h     ; SI = смещение начала командной строки
          lodsb           ; Получим кол-во символов
          cmp al, 0
          je epic_Fail    ; Пустая ком. строка
          inc si          ; SI указывает на 1ый символ строки
Next_char:
        lodsb           ; Получаем очередной символ
        cmp al, 0Dh     ; Конец строки?
        je GetL         ; Да - на выход... 
        stosb           ; Нет - сохраним символ в переменной FName
        jmp  short Next_char    ; Следующий символ...
GetL:
        xor al,al       ;ASCII 0 в конец
        mov al, 0
    stosb
        mov al, '$'
        stosb
        clc                     ; Сбросим флаг переноса...
        jmp     GoNext
epic_Fail:
        mov bl, 1
GoNext:
        ret                     ; Выходим из процедуры
RCLine endp
 
 
 
InitProc:
    
     mov di, offset FName    ; ES:DI = адрес FName
       
        call RCLine     ; Вызываем процедуру чтения параметров командной строки
    mov al,0
    mov ah,43h
    int 21h      
    mov bx,0
.386
    bt cx,bx
    jnc next1
    lea dx,msg1
        call WriteCons
next1:
    inc bx
    bt cx,bx
    jnc next2
    lea dx,msg2
        call WriteCons
next2:
    inc bx
    bt cx,bx
    jnc next3
    lea dx,msg3
        call WriteCons
next3:
    inc bx
    bt cx,bx
    jnc next4
    lea dx,msg4
        call WriteCons
next4:
    inc bx
    bt cx,bx
    jnc next5
    lea dx,msg5
        call WriteCons
next5:
    inc bx
    bt cx,bx
    jnc next6
    lea dx,msg6
        call WriteCons
next6:
    inc bx
    bt cx,bx
    jnc next7
    lea dx,msg7
        call WriteCons
next7:
        ret
program    ends
        end     start
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27445 / 18375 / 7273
Регистрация: 22.10.2011
Сообщений: 32,335
Записей в блоге: 6
09.11.2011, 23:03 6
Ты опять не делаешь того, что я написала выше...

Assembler
1
2
3
4
5
        call RCLine     ; Вызываем процедуру чтения параметров командной строки
        mov al,0
        mov ah,43h
    mov dx, offset FName ; вот этой строки у тебя не было...
        int 21h
, соответственно, атрибуты брались не у того файла, имя которого ты передала в ком. строке, а у какого-то левого...

Добавила вышеуказанную строку. Запустила. Работает:
1
Миниатюры
Получить атрибуты файла, заданного в командной строке  
Лунный пёс
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 12
09.11.2011, 23:42  [ТС] 7
ооооо! спасибо, спасибо, алилуяалилуя)))
0
Mikl___
Автор FAQ
13740 / 6484 / 650
Регистрация: 11.11.2010
Сообщений: 11,704
10.11.2011, 06:41 8
Лунный пёс, а теперь удали все наработки UI и напиши программу полностью самостоятельно, никуда не заглядывая, и тогда будет действительно "алилуяалилуя)))"
0
10.11.2011, 06:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2011, 06:41

Поиск заданного файла в заданной папке (путь и имя файла задаются в командной строке)
Добрый вечер! Как сделать поиск заданного файла в заданной папке(путь и имя файла задаются в...

Разработать программу, производящую копирование заданного в командной строке файла
Здравствуйте, не могли бы помочь? Не могу разработать программу, производящую копирование заданного...

Написать программу, создающую файл - копию заданного файла. Имена файлов задаются в командной строке
1. Написать программу, создающую файл - копию заданного файла. Имена файлов задаются в командной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru