Здравствуйте! У меня есть слово. Например, его имя KOL. 14 и 15 биты хранят некое число. Как мне извлечь их из этого слова и вывести на экран это самое число? Пожалуйста, напишите код. Очень надо! Help!!! )))
для двойного слова Код (Text): KOL dd ? and dword ptr [KOL],0000c000h shr dword ptr [KOL],14 add byte ptr [KOL],'0' push word ptr [KOL] call SomePrintToScreenProcedure call StandardExitProcedureForOurOS для слова Код (Text): KOL dw ? and word ptr [KOL],c000h shr word ptr [KOL],14 add byte ptr [KOL],'0' push word ptr [KOL] call SomePrintToScreenProcedure call StandardExitProcedureForOurOS опоздал =)
Код (Text): MASM MODEL SMALL .DATA KOL DW 0 .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV AH,2AH INT 21H INT 11H MOV KOL,AX ;завершение программы END MAIN Здесь я хочу вывести на экран кол-во LPT портов на данной машине. INT 11H помещает в AX инфу о подключенных устройствах. AX (16 бит) копирую в KOL. И теперь мне надо вывести число, которое содержат 14 и 15 биты переменной KOL. ОС Windows. Здесь явно не верно написал. Мне надо написать программу, выводящую на экрна количество LPT портов на данной машине. Помогите с задачей.
вывод строки на экран : http://www.google.ru/search?hl=ru&q=%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4+%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8+%D0%BD%D0%B0+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD+int+21h&lr= http://www.google.ru/search?hl=ru&newwindow=1&suggon=0&q=%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4+%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8+%D0%BD%D0%B0+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD+int+10&lr= остальное уже всё есть
Блин, я в Ассемблере 0! Помогите с написанием программы. Очень надо! Можете написать программу, выводящую на экран количество LPT портов на данной машине за Яндекс.Деньги?
Код (Text): ideal model tiny codeseg org 100h start: int 11h mov al,ah shr al,6 or al,'0' mov [num],al mov ah,9 mov dx,offset mess int 21h ret mess db 13,10,'Количество параллельных портов: ' num db ' .',13,10,'$' end start
Vov4ick Спасибо за помощь. Я скомпилировал, но мне трижды выводится результат и кроме него "абракадабра". Кириллицу заметил на латинские быквы, но это не помогло. Кроме того, программа после этого зависает.
Код (Text): ideal model tiny codeseg org 100h start: int 11h mov al,ah shr al,6 or al,'0' mov [num],al mov ah,9 mov dx,offset mess int 21h int 20 mess db 13,10,'Chislo LPT: ' num db ' .',13,10,'$' end start Изменил как сказал. Но теперь выводит просто число. Может еще что-то поменять? Компилирую в Turbo Assembler как exe-файл. Нужен именно exe.
dag int 20h Код (Text): ideal model small codeseg org 100h start: mov ax,@data mov ds,ax int 11h mov al,ah shr al,6 or al,'0' mov [num],al mov ah,9 mov dx,offset mess int 21h mov ah,4ch int 21h dataseg mess db 13,10,'Количество параллельных портов: ' num db ' .',13,10,'$' stack end start
Огромное спасибо! Работает! Выручили! У меня последний вопрос. думаю я уже надоел вам)))). Прокомментируйте пожалуйста подробно что выполняется здесь (чтобы защиту лабы не запороть): Код (Text): mov al,ah shr al,6 or al,'0' mov [num],al mov ah,9 mov dx,offset mess int 21h И что такое в сегменте данных? Как это объединяет строки? У МЕНЯ НА КОМПЕ СТОИТ 1 LPT ПОРТ (ЭТО ВИДНО В ДИСПЕТЧЕРЕ УСТРОЙСТВ), А ДАННАЯ ПРОГРАММА ГОВОРИТ ЧТО ИХ ТРИ! ПОЧЕМУ? Заранее благодарен.
_AVS_ 1) mov al,ah/shr al,6 то же самое что и shr ax,14 (14=6+8) 2) or al,'0' - получение ASCII символа, соответствующего числу находящемуся в al 3) mov ah,9/mov dx,offset mess/int 21h - вывод на экран строки находящейся по адресу mess до знака '$' 4) 13,10 символы приводящие к переходу на следующую строку экрана 5) в диспетчере устройств ты можешь программно переключить параллельный порт на LPT1, LPT2, LPT3
dag retn -- для com-файлов прекрасный выход и короче int 20h на 1 байт, правда стек должен быть сбалансирован, иначе можно использовать комбинацию push 0/retn