На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Мой сидюк меня не слышит
    Народ! Нужен ваш хелп. Очень.
    Каким прерыванием открыть/закрыть сидюк?
    Спасибо.
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;; Пример открывания и закрытия CD-ROM`а (by 7in) ;;
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      .MODEL Tiny,Pascal
      .CODE
      ORG 100h
      SMART
      Start:
      call GetCDROMInfo
      or al,al
      lea dx,Error
      je Exit ; Если MSCDEX
      push FirstCDROM
      mov ax,1 ; Открыть CD-ROM
      push ax
      call CDROMEject
      lea dx,Opened
      mov ah,9
      int 21h
      push FirstCDROM
      xor ax,ax ; Закрыть CD-ROM
      push ax
      call CDROMEject
      lea dx,Closed
      Exit: mov ah,9
      int 21h
      int 20h
      Opened DB 'CDROM is Ejected!',13,10,'$'
      Closed DB 'Tray is Closed!',13,10,'$'
      Error DB 'MSCDEX is not installed!',7,13,10,'$'
      ;-- Процедуры ---------------------------------------------------------------;
      FirstCDROM DW ? ; Номер буквы имени первого CD-ROM-устройства (A=0...)
      CDROMsNumber DW ? ; Количество CD-ROM-устройств
      ; Возвращает AL=1, если MSCDEX загружен, и заполняет FirstCDROM и
      ; CDROMsNumber соответствующими значениями. Возвращает AL=0, если
      ; MSCDEX не загружен, и дальнейшая работа с CD-ROM невозможна.
      GetCDROMInfo proc
      mov ax,1500h
      xor bx,bx
      xor cx,cx
      int 2Fh
      xor al,al
      or bx,bx
      jz @@Error
      inc ax
      mov FirstCDROM,cx
      mov CDROMsNumber,bx
      @@Error: ret
      GetCDROMInfo endp
      ; Формат запроса
      Request struc
      ReqLen DB ? ; Длина запроса
      SubUnit DB ? ; Номер подустройства драйвера
      Command DB ? ; Код коданды
      Status DW ? ; Статус (результат)
      ; Status - Если бит 15 установлен, значит ошибка, код в младшем байте
      ; Status - Если бит 9 установлен, значит устройство занято
      ; Status - Если бит 8 установлен, значит запрос выполнен!!!
      Reserved DB 8 dup (?) ; Резерв (устанавливается драйвером)
      ; Далее идут данные для команды 12 (IOCTLO)
      Media DB ? ; Media descriptor byte from BPB
      Address DD ? ; Указатель на передаваемые байты
      DataSize DW ? ; Количество передаваемых байт
      Sector DW ? ; Номер начального сектора
      VolID DD ? ; DWORD ptr to requested vol ID if error 0Fh
      ends
      ; Послает драйверу устройства Drive запрос типа Request, на который
      ; указывает Data. После выполнения запроса в поля ErrorCode и Status
      ; заносится код результата.
      SendCDROMRequest proc
      arg Drive:WORD, Data:DWORD
      uses ES
      mov ax,1510h
      mov cx,Drive
      les bx,Data
      int 2Fh
      ret
      SendCDROMRequest endp
      ; Открывает (Open<>0) / закрывает (Open=0) устройство Drive.
      ; Функция возвращает статус в регистре AX.
      CDROMEject proc
      arg Drive:WORD, Open:BYTE
      local Data:Request, Code:BYTE
      mov Data.ReqLen,26
      mov Data.SubUnit,0
      mov Data.Command,12
      and Data.Status,0
      mov Data.Media,0
      lea ax,Code
      mov WORD PTR Data.Address[0],ax
      mov WORD PTR Data.Address[2],ss
      mov Data.DataSize,1
      and Data.Sector,0
      and WORD PTR Data.VolID[0],0
      and WORD PTR Data.VolID[2],0
      mov Code,0
      cmp Open,0
      jne @@OpenIt
      mov Code,5
      @@OpenIt: push Drive
      push ss
      lea ax,Data
      push ax
      call SendCDROMRequest
      mov ax,Data.Status
      ret
      CDROMEject endp
      END Start
        Ой! Красота-то какая!!! :)))
        Неужели трудно сделать, чтобы пробелы вначале не удалялись?!!!
        Эту прогу я тебе на мыло кину сейчас...
          Спасибо !!!
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0210 ]   [ 16 queries used ]   [ Generated: 29.03.24, 13:10 GMT ]