Надо переделать прогу

Тема в разделе "WASM.BEGINNERS", создана пользователем Miha_X, 14 дек 2007.

  1. Miha_X

    Miha_X New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    4
    Здравствуйте!

    Тут в одной теме вы помогли человеку написать прогу.

    Вот ее код:

    Код (Text):
    1. MASM ;Режим работы
    2. MODEL SMALL ;Модель памяти
    3.  
    4. .DATA ;Сегмент данных
    5.  
    6. MESS DB 13,10,'=================',13,10
    7. TEXT DB 'Number of LPT ports: '
    8. NUM DB ' .',13,10,13,10
    9. LINE DB 13,10,'=================',13,10,'$'
    10.  
    11.  
    12. .CODE ;Сегмент кода
    13.     LPT_PROCEDURE:
    14.         ;Инициализация сегментных регистров
    15.         MOV AX,@DATA
    16.         MOV DS,AX
    17.  
    18.         INT 11H ;Прерывание, возвращающее информацию о состоянии подключенных устройств
    19.         ;Теперь в AX хранится эта информация об устройствах
    20.         SHR AX,14 ;Обращаемся к 14 биту
    21.         OR AL,'0' ;Получение ASCII символа, соответствующего числу находящемуся в AL
    22.         MOV [NUM],AL
    23.         ;Вывод на экран строки находящейся по адресу MESS до знака '$'
    24.         MOV AH,9
    25.         MOV DX,OFFSET MESS
    26.         INT 21H
    27.  
    28.         ;Завершение работы
    29.         MOV AX,4C00H ;Пересылка 4c00h в регистр ax
    30.         INT 21H ;Вызов прерывания с номером 21H
    31. END LPT_PROCEDURE ;Конец программы
    У меня вопрос: как мне переделать эту программу, чтобы она выводила количество не LPT, а COM портов? Количество LPT хранится в 2-х битах, а COM в 3-х. Что надо изменить?
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Сейчас тебе напишут... но лучше - берешь справку по прерываниям. Читаешь, что возвращает 11h-е. Сдвигаешь AX на нужное количество битов (вместо 14 - на сколько надо). И дальше все точно также, потому что хоть 2 бита, хоть 3 - получим цифру от 0 до 7, то есть единственная замена - получение этого числа из битов в AX
     
  3. Miha_X

    Miha_X New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    4
    Количество LPT хранится в 14 и 15 битах. Количество COM в 9,10 и 11 битах. Получается вместо 14 пишу 9 и он возвращает число от 0 до 7? Пробовал, выводит на экран букву "t".
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Сбрось в ноль более старшие биты, чем нужные.
    Вообще с такими вопросами надо обращаться в раздел "Студентам". Он создан специально для этого.
     
  5. Miha_X

    Miha_X New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    4
    Извините. В следующий раз там напишу. Напишите пожалуйста этот код и где его вписать, чтобы кол-во COM портов вывело. Я думаю вы люди в этом деле опытные, а у нас за весь семестр по ассемблеру всего пару раз были занятия, а работу сдавать завтра. Надеюсь на помощь профессионалов. )))
     
  6. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Miha_X
    Код (Text):
    1.                INT 11H ;Прерывание, возвращающее информацию о состоянии подключенных устройств
    2.         ;Теперь в AX хранится эта информация об устройствах
    3.                          and ah,00001110b
    4.         SHR ah,1 ;убираем лишний бит
    5.         OR ah,'0' ;Получение ASCII символа, соответствующего числу находящемуся в ah
    6.         MOV [NUM],ah
    А вообще-то привыкай работать сам;)