IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Атрибуты файла, ассемблер
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Доброго времени суток! У меня тут заданьеце : вывести атрибуты файла, в диалоговой форме произвести переустановку атрибутов. Реализовал первую часть - вывод атрибутов, использую функцию 43h прерывания 21h. Но возникает какая-то ошибка при вызове прерывания. В чём проблема?

data segment
path db "E:\data.txt",0
mes1 db 13,10,"read\write$"
mes2 db 13,10,"read only$"
mes3 db 13,10,"X-files$"
mes4 db 13,10,"system$"
data ends

code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax

mov ax, 43h
mov al,0
mov dx, offset path
int 21h

add ax, '0'
int 29h

m1: cmp cx,00h
jne m2
mov ah, 09h
mov dx,offset mes1
int 21h
jmp mx

m2: cmp cx,01h
jne m3
mov ah, 09h
mov dx,offset mes2
int 21h
jmp mx

m3: cmp cx,02h
jne m4
mov ah, 09h
mov dx,offset mes3
int 21h
jmp mx

m4: cmp cx,04h
mov ah, 09h
mov dx,offset mes4
int 21h
jmp mx

mx: mov ax, 4c00h
int 21h
code ends
end start

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вот, что у меня получилось:

data segment
path db "E:/data.txt",0
mes db 13,10,"R/W$"
mes1 db 13,10,"RO$"
mes2 db 13,10,"Hidden$"
mes3 db 13,10,"System$"
mes4 db 13,10,"Label$"
mes5 db 13,10,"Dir$"
mes6 db 13,10,"Archive$"

mesmen db 13,10,"ON\OFF RO pressed (1)",13,10,"ON\OFF Hidden pressed (2)",13,10,"ON\OFF System pressed (3)",13,10,"ON\OFF Label pressed (4)",13,10,"ON\OFF Dir pressed (5)",13,10,"ON\OFF Archive pressed (6)$"

mes_error_1 db 13,10,"Illegal button!$"

myAttr DW ?

data ends

code segment
assume cs:code, ds:data

showAtr proc

m : mov ax,cx
cmp ax,0000h
jnz m1
mov ah, 09h
mov dx,offset mes
int 21h

m1: mov ax,cx
and ax,0001h
jz m2
mov ah, 09h
mov dx,offset mes1
int 21h


m2: mov ax,cx
and ax,0002h
jz m3
mov ah, 09h
mov dx,offset mes2
int 21h

m3: mov ax,cx
and ax,0004h
jz m4
mov ah, 09h
mov dx,offset mes3
int 21h

m4: mov ax,cx
and ax,0008h
jz m5
mov ah, 09h
mov dx,offset mes4
int 21h

m5: mov ax,cx
and ax,0010h
jz m6
mov ah, 09h
mov dx,offset mes5
int 21h

m6: mov ax,cx
and ax,0020h
jz m7
mov ah, 09h
mov dx,offset mes6
int 21h
m7:
ret

showAtr endp


start: mov ax,data
mov ds,ax

mov ah, 43h
mov al,0
mov dx, offset path
int 21h

jnc m_

add ax,'0'
int 29h
jmp mx

m_: call showAtr

xor ax,ax
mov ah, 09h
mov dx,offset mesmen
int 21h

mov ah,01h
int 21h

sub al,'0'
dec al

mov ah,al
sub ah,1
jz m_1

mov ah,al
sub ah,2
jz m_2

mov ah,al
sub ah,3
jz m_3

mov ah,al
sub ah,4
jz m_4

mov ah,al
sub ah,5
jz m_5

mov ah,al
sub ah,6
jz m_6

mov ah, 09h
mov dx,offset mes_error_1
int 21h
jmp mx

m_1: mov cx,myAttr
mov ax,0001h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

m_2: mov cx,myAttr
mov ax,0002h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

m_3: mov cx,myAttr
mov ax,0004h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

m_4: mov cx,myAttr
mov ax,0008h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

m_5: mov cx,myAttr
mov ax,0010h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

m_6: mov cx,myAttr
mov ax,0020h

and cx,ax
jz _set

mov cx,myAttr
not ax
and cx,ax
jmp set_attr

_set: mov cx, myAttr
or cx,ax

set_attr: mov ax,43h
mov al,1
mov dx, offset path
int 21h
jc error
call showAtr
jmp mx

error: add ax,'0'
int 29h

mx: mov ax, 4c00h
int 21h

code ends
end start


...а скорей не получилось : при нажатии клавиши возникает ошибка и работа программы прекращается.
Я сделал без вот этого момента :

; это будет сдвиг
mov cl, al
mov ax, 0001h
; получаем маску для выбранного пользователем бита
shl ax, cl

- не особо понял, что здесь происходит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   Атрибуты файла   16.02.2009 3:50
volvo   Ну, наверное все-таки path db "E:/data.txt…   16.02.2009 4:20
Rocket   Ну, наверное все-таки [code=asm]path db "E:/…   17.02.2009 0:31
volvo   Ctrl+A... Программу сейчас гляну...   17.02.2009 0:43
volvo   Так... А в программе-то у тебя ошибка в том, что т…   17.02.2009 1:25
Rocket   Так, исправил следующем образом: data segment pa…   18.02.2009 2:09
volvo   Где ты выкопал этот 00h, не расскажешь? Документац…   18.02.2009 2:12
Rocket   Где ты выкопал этот 00h, не расскажешь? Документа…   18.02.2009 2:15
volvo   P.S. and ax,0000h jz m1 :blink: ты на са…   18.02.2009 2:16
Rocket   P.S. and ax,0000h jz m1 :blink: ты на с…   18.02.2009 2:27
Rocket   Вот пытаюсь произвести установку атрибута "re…   18.02.2009 3:53
volvo   Естественно, ты устанавливаешь комбинацию атрибуто…   18.02.2009 5:10
Rocket   Естественно, ты устанавливаешь комбинацию атрибут…   20.02.2009 1:34
volvo   Ага, and-ом, только не просто and-ом, а: mov ah, …   20.02.2009 2:10
Rocket   Теперь мне нужно сделать, чтоб всё это работало в …   20.02.2009 3:55
volvo   На самом деле все просто: ; вывел меню ; получ…   20.02.2009 4:45
Rocket   Вот, что у меня получилось: data segment path db…   20.02.2009 23:24
volvo   А что ж ты сделал тогда? Что за привычка - ВЫБРОСИ…   21.02.2009 0:36
Rocket   А что ж ты сделал тогда? Что за привычка - ВЫБРОС…   21.02.2009 3:17


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 23:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name