1. Заголовок или название темы должно быть информативным 2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE] 3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора. 5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM! 6. Проверяйте программы перед тем, как выложить их на форум!!
Доброго времени суток! У меня тут заданьеце : вывести атрибуты файла, в диалоговой форме произвести переустановку атрибутов. Реализовал первую часть - вывод атрибутов, использую функцию 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
Так... А в программе-то у тебя ошибка в том, что ты сравниваешь значения, а надо проверять биты, маску то есть... Вот так, например (не стал ничего оптимизировать, чтоб был понятен принцип):
data segment path db 'F:/a.txt',0 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$' data ends
code segment assume cs: code, ds: data start: mov ax, data mov ds, ax
mov ah, 43h mov al,0 mov dx, offset path int 21h jc error_occured ; если CF = 1, значит ошибка
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 mx mov ah, 09h mov dx,offset mes6 int 21h jmp mx