Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
lolPro
TASM

Программа запрещающая удаление файлов программами использующими средства DOS

01.12.2010, 20:51. Показов 2357. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуйста сделать блок схему для этой программы :
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
; tsr.asm
; ЏаЁ¬Ґа Ї*ббЁў*®© १Ё¤Ґ*в*®© Їа®Ја*¬¬л б ЇҐаҐ*®б®¬ Є®¤* ў PSP.
; ‡*ЇаҐй*Ґв г¤*«Ґ*ЁҐ д*©«®ў ** ¤ЁбЄҐ, гЄ*§***®¬ ў Є®¬**¤*®© бва®ЄҐ ўбҐ¬
; Їа®Ја*¬¬*¬, ЁбЇ®«м§гойЁ¬ б।бвў* DOS
; ђҐ§Ё¤Ґ*в**п Їа®Ја*¬¬* §**Ё¬*Ґв ў Ї*¬пвЁ 208 Ў*©в
;
; Љ®¬ЇЁ«пжЁп:
; TASM:
;  tasm /m tsr.asm
;  tlink /t /x tsr.obj
; MASM:
;  ml /c tsr.asm
;  link tsr.obj,,NUL,,,
;  exe2bin tsr.exe tsr.com
; WASM:
;  wasm tsr.asm
;  wlink file tsr.obj form DOS COM
;
    .model  tiny
    .code
    org 2Ch
envseg  dw  ?       ; ᥣ¬Ґ*в*л© *¤аҐб Є®ЇЁЁ ®Єа㦥*Ёп DOS
    org 80h
cmd_len db  ?       ; ¤«Ё** Є®¬**¤*®© бва®ЄЁ
cmd_line db ?       ; **з*«® Є®¬**¤*®© бва®ЄЁ
    org 100h        ; COM-Їа®Ја*¬¬*
 
start:
    jmp short initialize    ; ЇҐаҐе®¤ Ё*ЁжЁ*«Ё§Ёагойго з*бвм
 
int21h_handler  proc    far ; ®Ўа*Ў®взЁЄ ЇаҐалў**Ёп 21h
                pushf       ; б®еа**Ё¬ д«*ЈЁ
        cmp ah,41h  ; Ґб«Ё ўл§ў*«Ё дг*ЄжЁо 41h (г¤*«Ёвм д*©«)
        je  fn41h
        cmp ax,7141h ; Ё«Ё 7141h (г¤*«Ёвм д*©« б ¤«Ё**л¬ Ё¬Ґ*Ґ¬)
        je  fn41h    ; **з*вм **и ®Ўа*Ў®взЁЄ
        jmp short not_fn41h ; Ё**зҐ - ЇҐаҐ¤*вм гЇа*ў«Ґ*ЁҐ ў DOS
fn41h:
        push    ax      ; б®еа**Ё¬ ¬®¤ЁдЁжЁагҐ¬л© аҐЈЁбва
        push bx
        mov bx,dx
        cmp byte ptr [bx+1],':' ; Ґб«Ё ўв®а®© бЁ¬ў®«
                    ; ASCIZ-бва®ЄЁ, ЇҐаҐ¤***®© INT 21h
                    ; ¤ў®Ґв®зЁҐ - §**зЁв ЇҐаўл© бЁ¬ў®« -
                    ; - Ё¬п ¤ЁбЄ*.
        je  full_spec
        mov ah,19h      ; Ё**зҐ: 
        int 21h     ; ”г*ЄжЁп DOS 19h - ®ЇаҐ¤Ґ«Ёвм ⥪гйЁ© ¤ЁбЄ
        add al,'A'      ; ЇаҐ®Ўа*§®ў*вм *®¬Ґа ¤ЁбЄ* Є §*Ј«*ў*®© ЎгЄўҐ
        jmp short compare   ; ЇҐаҐ©вЁ Є ба*ў*Ґ*Ёо
full_spec:
        mov al,byte ptr [bx] ; AL=Ё¬п ¤ЁбЄ* Ё§ ASCIZ-бва®ЄЁ
        and al,11011111b    ; ЇаҐ®Ўа*§®ў*вм Є §*Ј«*ў*®© ЎгЄўҐ
compare:
        db  3Ch ; CMP AL, (**з*«® Є®¤* Є®¬**¤л cmp al,зЁб«®)
drive_letter    db  'D' ; бо¤* Їа®жҐ¤га* Ё*ЁжЁ*«Ё§*жЁЁ §*ЇЁиҐв *г¦*го
                ; ЎгЄўг
        pop bx
        pop ax  ; AX Ў®«миҐ *Ґ Ї®вॡгҐвбп
                        ; Ґб«Ё ¤ЁбЄЁ б®ўЇ*¤*ов
        je  access_denied       ; §*ЇаҐвЁвм г¤*«Ґ*ЁҐ
not_fn41h:      
        popf                ; Ё д«*ЈЁ
        ; Ё ЇҐаҐ¤*вм гЇа*ў«Ґ*ЁҐ ЇаҐ¤л¤г饬㠮Ўа*Ў®взЁЄг INT 21h:
        db  0EAh    ; JMP FAR (**з*«® Є®¤* Є®¬**¤л ¤*«м*ҐЈ® ЇҐаҐе®¤*)
old_int21h  dd  0   ; бо¤* Їа®жҐ¤га* Ё*ЁжЁ*«Ё§*жЁЁ §*ЇЁиҐв *¤аҐб
                ; ЇаҐ¤л¤г饣® ®Ўа*Ў®взЁЄ* INT 21h
access_denied:
                        ; ў®ббв**®ўЁвм
        popf                ; д«*ЈЁ
        push    bp
        mov bp,sp
        or  word ptr [bp+6],1   ; гбв**®ўЁвм д«*Ј ЇҐаҐ*®б*
            ; (ЎЁв 1) ў ॣЁбвॠд«*Ј®ў, Є®в®ал© Ї®¬ҐбвЁ«* Є®¬**¤*
            ; INT 21h ў б⥪ ЇҐаҐ¤ *¤аҐб®¬ ў®§ўа*в*
        pop bp
        mov ax,5        ; ў®§ўа*вЁвм Є®¤ ®иЁЎЄЁ
                    ; "¤®бвгЇ §*ЇаҐйс*"
        iret            ; ўҐа*гвмбп ў Їа®Ја*¬¬г
int21h_handler  endp
 
tsr_length equ $-int21h_handler
 
initialize  proc near
    cmp byte ptr cmd_len,3 ; Їа®ўҐаЁвм а*§¬Ґа Є®¬**¤*®© бва®ЄЁ
    jne not_install ; ¤®«¦*® Ўлвм 3 (Їа®ЎҐ«, ¤ЁбЄ, ¤ў®Ґв®зЁҐ)
    cmp byte ptr cmd_line[2],':' ; Їа®ўҐаЁвм ваҐвЁ© бЁ¬ў®« Є®¬**¤*®©
                ; бва®ЄЁ (¤®«¦*® Ўлвм ¤ў®Ґв®зЁҐ)
    jne not_install
    mov al, byte ptr cmd_line[1]
    and al,11011111b    ; ЇаҐ®Ўа*§®ў*вм ўв®а®© бЁ¬ў®«
                        ; Є §*Ј«*ў*®© ЎгЄўҐ
    cmp al,'A'  ; Їа®ўҐаЁвм зв® нв® *Ґ
    jb  not_install         ; ¬Ґ*миҐ 'A' Ё *Ґ Ў®«миҐ
    cmp al,'Z'  ; 'Z'
    ja  not_install         ; Ґб«Ё е®вм ®¤*® Ё§ нвЁе
    ; гб«®ўЁ© *Ґ ўлЇ®«*пҐвбп - ўл¤*вм Ё*д®а¬*жЁо ® Їа®Ја*¬¬Ґ Ё ўл©вЁ
    ; Ё**зҐ - **з*вм Їа®жҐ¤гаг Ё*ЁжЁ*«Ё§*жЁЁ
    mov byte ptr drive_letter,al    ; ЇҐаҐ¤*вм AL ў ⥫®
                        ; १Ё¤Ґ*в*
    push    es
    mov ax,3521h        ; AH=35h, AL=*®¬Ґа ЇаҐалў**Ёп
    int 21h         ; Ї®«гзЁвм *¤аҐб ®Ўа*Ў®взЁЄ* INT 21h
    mov word ptr old_int21h,bx  ; Ё Ї®¬ҐбвЁвм ҐЈ® ў ⥫® १Ё¤Ґ*в*
    mov word ptr old_int21h+2,es ;
    pop es
 
    cld             ; ЇҐаҐ*®б Є®¤* १Ё¤Ґ*в*
    mov si,offset int21h_handler ;**зЁ**п б нв®Ј® *¤аҐб*
    mov di,80h          ; ў PSP:0080h
    mov cx,tsr_length
    rep movsb
 
    mov ax,2521h        ; AH = 25h, AL=*®¬Ґа ЇаҐалў**Ёп
    mov dx,80h          ; DS:DX - *¤аҐб **襣® ®Ўа*Ў®взЁЄ*
                    ; (Є®в®ал© Ї®б«Ґ ЇҐаҐ*®б* - PSP:80h)
    int 21h         ; гбв**®ўЁвм ҐЈ®
 
    mov ah,49h          ; AH=49h
    mov es,word ptr envseg  ; ES=ᥣ¬Ґ*в*л© *¤аҐб Ў«®Є* б Є®ЇЁҐ©
                ; ЇҐаҐ¬Ґ**ле б।л DOS
    int 21h     ; ®бў®Ў®¤Ёвм Ї*¬пвм, ЁбЇ®«м§гҐ¬го нвЁ¬ Ў«®Є®¬
 
    mov dx,80h+tsr_length   ; DX - *¤аҐб ЇҐаў®Ј® Ў*©в* §* Є®*殬
                    ; १Ё¤Ґ*в*®© Їа®Ја*¬¬л
    int 27h         ; §*ўҐаиЁвм ўлЇ®«*Ґ*ЁҐ, ®бв*ўиЁбм
                    ; १Ё¤Ґ*⮬
 
not_install:
    mov ah,9            ; AH=09h
    mov dx,offset usage     ; DS:DX=*¤аҐб бва®ЄЁ б Ё*д®а¬*жЁҐ© ®Ў
                    ; ЁбЇ®«м§®ў**ЁЁ Їа®Ја*¬¬л
    int 21h         ; ўлў®¤ бва®ЄЁ ** нЄа**
    ret             ; ®Ўлз*®Ґ §*ўҐаиҐ*ЁҐ Їа®Ја*¬¬л
 
; ⥪бв, Є®в®ал© ўл¤*св Їа®Ја*¬¬* ЇаЁ §*ЇгбЄҐ б *ҐЇа*ўЁ«м*®© Є®¬**¤*®©
; бва®Є®©
usage   db  'Usage: tsr.com D:',0Dh,0Ah
    db  'Denies delete on drive D:',0Dh,0Ah
    db  '$'
 
initialize  endp
    end start
Добавлено через 1 минуту
это подразумеваеться как "программа запрещающая удаление файлов программами использующими средства DOS"
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2010, 20:51
Ответы с готовыми решениями:

Программа, запрещающая изменять местоположение и размер каких-либо окон
Я представляю это так: программа сидит в трее и имеет два состояния: включено и выключено (меняется щелчком по значку). Когда программа...

Программа для копирования файлов c жесткого диска на флешку под DOS
Добрый день! Подскажите, пожалуйста, программу, с помощью которой можно скопировать файлы на флешку в DOS

Программа для обработки аргументов командной строки (удаление файлов определенного размера)
Очень нужна программа на JS, которая будет обрабатывать аргументы командной строки (удалять файлы определенного размера), либо, при их...

4
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
02.12.2010, 04:59
lolPro, а ты сам видел комментарии к своей программе?
0
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
02.12.2010, 09:12
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
; tsr.asm
; Пример п*ссив*ой резиде*т*ой прогр*ммы с пере*осом код* в PSP.
; З*прещ*ет уд*ле*ие ф*йлов ** диске, ук*з***ом в ком**д*ой строке всем
; прогр*мм*м, использующим средств* DOS
; Резиде*т**я прогр*мм* з**им*ет в п*мяти 208 б*йт
;
; Компиляция:
; TASM:
;  tasm /m tsr.asm
;  tlink /t /x tsr.obj
; MASM:
;  ml /c tsr.asm
;  link tsr.obj,,NUL,,,
;  exe2bin tsr.exe tsr.com
; WASM:
;  wasm tsr.asm
;  wlink file tsr.obj form DOS COM
;
        .model  tiny
        .code
        org     2Ch
envseg  dw      ?               ; сегме*т*ый *дрес копии окруже*ия DOS
        org     80h
cmd_len db      ?               ; дли** ком**д*ой строки
cmd_line db     ?               ; **ч*ло ком**д*ой строки
        org     100h            ; COM-прогр*мм*
 
start:
        jmp short initialize    ; переход и*ици*лизирующую ч*сть
 
int21h_handler  proc    far     ; обр*ботчик прерыв**ия 21h
                pushf           ; сохр**им фл*ги
                cmp     ah,41h  ; если вызв*ли фу*кцию 41h (уд*лить ф*йл)
                je      fn41h
                cmp     ax,7141h ; или 7141h (уд*лить ф*йл с дли**ым име*ем)
                je      fn41h    ; **ч*ть **ш обр*ботчик
                jmp short not_fn41h ; и**че - перед*ть упр*вле*ие в DOS
fn41h:
                push    ax              ; сохр**им модифицируемый регистр
                push bx
                mov bx,dx
                cmp     byte ptr [bx+1],':'     ; если второй символ
                                        ; ASCIZ-строки, перед***ой INT 21h
                                        ; двоеточие - з**чит первый символ -
                                        ; - имя диск*.
                je      full_spec
                mov     ah,19h          ; и**че: 
                int     21h             ; Фу*кция DOS 19h - определить текущий диск
                add     al,'A'          ; преобр*зов*ть *омер диск* к з*гл*в*ой букве
                jmp short compare       ; перейти к ср*в*е*ию
full_spec:
                mov     al,byte ptr [bx] ; AL=имя диск* из ASCIZ-строки
                and     al,11011111b    ; преобр*зов*ть к з*гл*в*ой букве
compare:
                db      3Ch     ; CMP AL, (**ч*ло код* ком**ды cmp al,число)
drive_letter    db      'D'     ; сюд* процедур* и*ици*лиз*ции з*пишет *уж*ую
                                ; букву
                pop     bx
                pop     ax      ; AX больше *е потребуется
                                                ; если диски совп*д*ют
                je      access_denied           ; з*претить уд*ле*ие
not_fn41h:              
                popf                            ; и фл*ги
                ; и перед*ть упр*вле*ие предыдущему обр*ботчику INT 21h:
                db      0EAh    ; JMP FAR (**ч*ло код* ком**ды д*ль*его переход*)
old_int21h      dd      0       ; сюд* процедур* и*ици*лиз*ции з*пишет *дрес
                                ; предыдущего обр*ботчик* INT 21h
access_denied:
                                                ; восст**овить
                popf                            ; фл*ги
                push    bp
                mov     bp,sp
                or      word ptr [bp+6],1       ; уст**овить фл*г пере*ос*
                        ; (бит 1) в регистре фл*гов, который поместил* ком**д*
                        ; INT 21h в стек перед *дресом возвр*т*
                pop     bp
                mov     ax,5            ; возвр*тить код ошибки
                                        ; "доступ з*прещё*"
                iret                    ; вер*уться в прогр*мму
int21h_handler  endp
 
tsr_length equ $-int21h_handler
 
initialize      proc near
        cmp     byte ptr cmd_len,3 ; проверить р*змер ком**д*ой строки
        jne     not_install     ; долж*о быть 3 (пробел, диск, двоеточие)
        cmp     byte ptr cmd_line[2],':' ; проверить третий символ ком**д*ой
                                ; строки (долж*о быть двоеточие)
        jne     not_install
        mov     al, byte ptr cmd_line[1]
        and     al,11011111b    ; преобр*зов*ть второй символ
                                                ; к з*гл*в*ой букве
        cmp     al,'A'  ; проверить что это *е
        jb      not_install                     ; ме*ьше 'A' и *е больше
        cmp     al,'Z'  ; 'Z'
        ja      not_install                     ; если хоть од*о из этих
        ; условий *е выпол*яется - выд*ть и*форм*цию о прогр*мме и выйти
        ; и**че - **ч*ть процедуру и*ици*лиз*ции
        mov     byte ptr drive_letter,al        ; перед*ть AL в тело
                                                ; резиде*т*
        push    es
        mov     ax,3521h                ; AH=35h, AL=*омер прерыв**ия
        int     21h                     ; получить *дрес обр*ботчик* INT 21h
        mov     word ptr old_int21h,bx  ; и поместить его в тело резиде*т*
        mov     word ptr old_int21h+2,es ;
        pop     es
 
        cld                             ; пере*ос код* резиде*т*
        mov     si,offset int21h_handler ;**чи**я с этого *дрес*
        mov     di,80h                  ; в PSP:0080h
        mov     cx,tsr_length
        rep movsb
 
        mov     ax,2521h                ; AH = 25h, AL=*омер прерыв**ия
        mov     dx,80h                  ; DS:DX - *дрес **шего обр*ботчик*
                                        ; (который после пере*ос* - PSP:80h)
        int     21h                     ; уст**овить его
 
        mov     ah,49h                  ; AH=49h
        mov     es,word ptr envseg      ; ES=сегме*т*ый *дрес блок* с копией
                                ; переме**ых среды DOS
        int     21h             ; освободить п*мять, используемую этим блоком
 
        mov     dx,80h+tsr_length       ; DX - *дрес первого б*йт* з* ко*цом
                                        ; резиде*т*ой прогр*ммы
        int     27h                     ; з*вершить выпол*е*ие, ост*вшись
                                        ; резиде*том
 
not_install:
        mov     ah,9                    ; AH=09h
        mov     dx,offset usage         ; DS:DX=*дрес строки с и*форм*цией об
                                        ; использов**ии прогр*ммы
        int     21h                     ; вывод строки ** экр**
        ret                             ; обыч*ое з*верше*ие прогр*ммы
 
; текст, который выд*ёт прогр*мм* при з*пуске с *епр*виль*ой ком**д*ой
; строкой
usage   db      'Usage: tsr.com D:',0Dh,0Ah
        db      'Denies delete on drive D:',0Dh,0Ah
        db      '$'
 
initialize      endp
        end     start
Все, что можно вытянуть из комментариев, читай и делай блок-схему.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
02.12.2010, 09:55
судя по возможности компиляции на тасм, масм и васм -- текст выдернут из книги Зубкова
0
1 / 1 / 0
Регистрация: 28.06.2018
Сообщений: 107
08.11.2020, 21:56
alexcoder, добрый вечер можете помочь нарисовать блок схему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2020, 21:56
Помогаю со студенческими работами здесь

Открытие файлов, не ассоциированных с какими-либо программами
Если windows, не имеет ассоциации какого то расширения, то задает вопрос, какой программой его открыть. Интересно а можно это сделать из...

Открытие программами файлов из списка, в текстовом файле
Здравствуйте ув. форумчане. Помогите допилить, ну очееень надо. Ос debian wheezy. Посредствам баша хочу организавать автоматическое...

Программа вычисления функции с под-программами
Составить программу вычисления функции с использованием подпрограммы-процедуры при х = 0, 45. U=x - sinx^3/2! + sinx^5/(3+x)! ...

Программа управляющая другими программами и процессами?
У меня такая проблема: мне нужно чтобы каждый день, автоматически закрывался мозилла и запускался мозбекап, делал этот самый бекап, потом...

есть программа надо некоторыю нюансы исправить . типа удаление столбцов и наладки сохранения открытия файлов
Срочно нужна помощ . курсач горит . есть программа надо некоторыю нюансы исправить . типа удаление столбцов и наладки сохранения открытия...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru