Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler]Вывести сообщение, Вывести сообщение в безопасном режиме 
V
    Опции темы
Гениальный123Робот
Дата 4.5.2007, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Написать программу, переключающую процессор в защищенный режим, выводящую на экране сообщение и затем возвращающую процессор в реальный режим. 
Заранее спасибо
PM MAIL   Вверх
ama_kid
Дата 4.5.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



Это не поможет?


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Гениальный123Робот
Дата 5.5.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(ama_kid @ 4.5.2007,  12:39)
Это не поможет?

К сожалению, нет...
PM MAIL   Вверх
dumb
Дата 5.5.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



пример из книги Зубкова.
Код

; pm0.asm
; Программа, выполняющая переход в защищенный режим и немедленный возврат.
; Работает в DOS в реальном режиме и в DOS-окне Windows 95 (Windows 
; перехватывает исключения, возникающие при попытке перехода в защищенный 
; режим из V86, и позволяет нам работать, но только на минимальном уровне 
; привилегий)
;
; Компиляция:
; TASM:
;  tasm /m pm0.asm
;  tlink /x /t pm0.obj
; MASM:
;  ml /c pm0.asm
;  link pm0.obj,,NUL,,,
;  exe2bin pm0.exe pm0.com
; WASM:
;  wasm pm0.asm
;  wlink file pm0.obj form DOS COM
;

    .model    tiny
    .code
    .386p        ; все наши примеры рассчитаны на 80386
    org    100h    ; это COM-программа
start:
; подготовить сегментные регистры
    push    cs
    pop    ds        ; DS - сегмент данных (и кода) нашей программы
    push    0B800h
    pop    es        ; ES - сегмент видеопамяти
; проверить, находимся ли мы уже в защищенном режиме
    mov    eax,cr0    ; прочитать регистр CR0
    test    al,1        ; проверить бит PE,
    jz    no_V86    ; если он ноль - мы можем продолжать,
; иначе - сообщить об ошибке и выйти
    mov    ah,9        ; функция DOS 09h
    mov    dx,offset v86_msg    ; DS:DX - адрес строки
    int    21h        ; вывод на экран
    ret            ; конец COM-программы
; (раз это защищенный режим, в котором работает наша DOS-
; программа, это должен быть режим V86)
v86_msg    db    "Running in V86 mode. Can't switch to PM$"

; сюда передается управление, если мы запущены в реальном режиме
no_V86:
; запретить прерывания
    cli
; запретить немаскируемое прерывания
    in    al,70h    ; индексный порт CMOS
    or    al,80h    ; установка бита 7 в нем запрещает NMI
    out    70h,al
; перейти в защищенный режим
    mov    eax,cr0    ; прочитать регистр CR0
    or    al,1    ; установить бит PE,
    mov    cr0,eax    ; с этого момента мы в защищенном режиме
; вывод на экран
    xor    di,di            ; ES:DI - начало видеопамяти
    mov    si,offset message    ; DS:SI - выводимый текст
    mov    cx,message_l
    rep movsb        ; вывод текста
    mov    ax,0720h    ; пробел с атрибутом 07h
    mov    cx,rest_scr    ; заполнить этим символом остаток экрана
    rep stosw
; переключиться в реальный режим
    mov    eax,cr0    ; прочитать CR0
    and    al,0FEh    ; сбросить бит PE
    mov    cr0,eax    ; с этого момента процессор работает в реальном 
            ; режиме
; разрешить немаскируемое прерывание
    in    al,70h    ; индексный порт CMOS
    and    al,07FH    ; сброс бита 7 отменяет блокирование NMI
    out    70h,al
; разрешить прерывания
    sti
; подождать нажатия любой клавиши
    mov    ah,0
    int    16h
; выйти из COM-программы
    ret
; текст сообщения с атрибутом после каждого символа для прямого вывода на экран
message    db    'H',7,'e',7,'l',7,'l',7,'o',7,' ',7,'f',7
    db    'r',7,'o',7,'m',7,' ',7,'P',7,'M',7
; его длина в байтах
message_l = $-message
; длина оставшейся части экрана в словах
rest_scr = (80*25)-(2*message_l)
    end    start



PM MAIL   Вверх
Гениальный123Робот
Дата 5.5.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Спасибо ;) +
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.