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
Как сделать, чтоб при нажатии соответствующей кнопки, устанавливался/сбрасывался атрибут?
На самом деле все просто:
; вывел меню
; получил текущие атрибуты файла mov ah, 43h mov al, 0 mov dx, offset path int 21h jc error
; вывел атрибуты call showAtr ; запомнил, оно дальше пригодится... ; естественно, в сегменте данных не забудь описать myAttr DW ? mov myAttr, cx
; ждешь нажатия на кнопку mov ah, 01h int 21h ; получаешь НОМЕР кнопки - 1 sub al, '0' dec al
; это будет сдвиг mov cl, al mov ax, 0001h ; получаем маску для выбранного пользователем бита shl ax, cl ; восстанавливаем атрибуты в CX mov cx, myAttr and cx, ax ; нужный бит установлен ? jz not_set ; Да, был установлен, надо его сбросить mov cx, myAttr not ax and cx, ax jmp set_attr not_set: ; Нет, результат AND был 0, значит, бит не был установлен mov cx, myAttr or cx, ax
set_attr: ; и устанавливаем то, что вышло... mov ah, 43h mov al,1 mov dx, offset path int 21h jc error call showAtr jmp mx ; ...
, я здесь не делал никаких проверок на то, какие клавиши нажимались... Добавь там проверку, после чтения с клавиатуры, что нажата одна из кнопок '1' .. '6', чтоб не было никаких неожиданностей...