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


Гость






Цитата
Я сделал без вот этого момента :
А что ж ты сделал тогда? Что за привычка - ВЫБРОСИТЬ все, что не понял, а потом сказать, что программа не работает?

Как ты хочешь менять значение определенного атрибута на противоположное? Чтобы это сделать, надо дождаться от пользователя решения, какой атрибут менять, потом перейти к соответствующему биту (для атрибута RO - это нулевой, самый младший бит, LSB как говорится; для атрибута Hidden - первый, для System - второй, и т.д.), проверить его текущее состояние, если он сейчас установлен, то сбросить, если НЕ установлен - установить. Так?

Продолжаем.. Как проверить бит, соответствующий данному атрибуту? Для начала, надо получить номер бита, начиная с 0. Получили, что дальше? Создаем маску для нужного бита: значение 0001h надо сдвинуть влево на столько, какой бит мы проверяем. Вот это и делается в нижеследующих строках:

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


Теперь у нас в AX - маска, с единицей ТОЧНО в том же месте, где находится изменяемый бит атрибута...
Кстати, твою программу можно сократить значительно, ты бы макросы что-ли задействовал? У тебя ж одно и то же делается 6 раз подряд...

И вот этого я не говорил, ты сам это придумал:
Цитата
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
В общем, перечитывай еще раз мой предыдущий пост. Там кусок из ОТРАБОТАВШЕЙ программы. Понимаешь? Она работает, а не должна бы работать... Вот и разберись, как она работает...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
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


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

 





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