Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 23.12.2009
Сообщений: 12
1

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

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

Author24 — интернет-сервис помощи студентам
Не создается 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2011, 16:32
Ответы с готовыми решениями:

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

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

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

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

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
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
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
09.11.2011, 21:01 4
Я что-то не пойму, ты где передаешь указатель на имя файла? Он должен лежать не в ES:[DI], а в DS:[DX]. То есть, тебе надо DS настроить на тот же сегмент (там же, в ASSUME), и потом смещение имени занести в DX. Это было первое. Второе: результат (набор флагов) эта функция возвращает не в AX, а в CX (Информация к размышлению ), так что поправь это тоже...
1
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
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
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
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
10.11.2011, 06:41 8
Лунный пёс, а теперь удали все наработки UI и напиши программу полностью самостоятельно, никуда не заглядывая, и тогда будет действительно "алилуяалилуя)))"
0
10.11.2011, 06:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2011, 06:41
Помогаю со студенческими работами здесь

Не удается в Командной строке задать атрибуты папке с пробелами в имени
Не удается задать атрибуты к папке через командную строку,если папка имеет название с пробелом...

Как в Командной строке получить дату последнего изменения файла или последнего доступа к нему?
суть такова, у меня есть список фаилов с полным адресом типо C:\sad\asds\dich.obj. требуется...

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

Вывести на экран атрибуты заданного файла
Ребят, понимаю что прошу многого, но это единственные 3 задания практических с билета, которые я не...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru