Здравствуйте! Тут в одной теме вы помогли человеку написать прогу. Вот ее код: Code (Text): MASM ;Режим работы MODEL SMALL ;Модель памяти .DATA ;Сегмент данных MESS DB 13,10,'=================',13,10 TEXT DB 'Number of LPT ports: ' NUM DB ' .',13,10,13,10 LINE DB 13,10,'=================',13,10,'$' .CODE ;Сегмент кода LPT_PROCEDURE: ;Инициализация сегментных регистров MOV AX,@DATA MOV DS,AX INT 11H ;Прерывание, возвращающее информацию о состоянии подключенных устройств ;Теперь в AX хранится эта информация об устройствах SHR AX,14 ;Обращаемся к 14 биту OR AL,'0' ;Получение ASCII символа, соответствующего числу находящемуся в AL MOV [NUM],AL ;Вывод на экран строки находящейся по адресу MESS до знака '$' MOV AH,9 MOV DX,OFFSET MESS INT 21H ;Завершение работы MOV AX,4C00H ;Пересылка 4c00h в регистр ax INT 21H ;Вызов прерывания с номером 21H END LPT_PROCEDURE ;Конец программы У меня вопрос: как мне переделать эту программу, чтобы она выводила количество не LPT, а COM портов? Количество LPT хранится в 2-х битах, а COM в 3-х. Что надо изменить?
Сейчас тебе напишут... но лучше - берешь справку по прерываниям. Читаешь, что возвращает 11h-е. Сдвигаешь AX на нужное количество битов (вместо 14 - на сколько надо). И дальше все точно также, потому что хоть 2 бита, хоть 3 - получим цифру от 0 до 7, то есть единственная замена - получение этого числа из битов в AX
Количество LPT хранится в 14 и 15 битах. Количество COM в 9,10 и 11 битах. Получается вместо 14 пишу 9 и он возвращает число от 0 до 7? Пробовал, выводит на экран букву "t".
Сбрось в ноль более старшие биты, чем нужные. Вообще с такими вопросами надо обращаться в раздел "Студентам". Он создан специально для этого.
Извините. В следующий раз там напишу. Напишите пожалуйста этот код и где его вписать, чтобы кол-во COM портов вывело. Я думаю вы люди в этом деле опытные, а у нас за весь семестр по ассемблеру всего пару раз были занятия, а работу сдавать завтра. Надеюсь на помощь профессионалов. )))
Miha_X Code (Text): INT 11H ;Прерывание, возвращающее информацию о состоянии подключенных устройств ;Теперь в AX хранится эта информация об устройствах and ah,00001110b SHR ah,1 ;убираем лишний бит OR ah,'0' ;Получение ASCII символа, соответствующего числу находящемуся в ah MOV [NUM],ah А вообще-то привыкай работать сам