ВУЗ:
Составители:
21
87 ; Загрузка в CS селектор сегмента кода, а в IP смещения следующей
88 ; команды (при этом и очищается очередь команд)
89 db 0eah ; Код команды far jmp
90 dw offset continue ; Смещение
91 dw 16 ; Селектор сегмента команд
92 continue:
93 ;Инициализация селектора сегмента данных
94 mov ax,8 ; Селектор сегмента данных
95 mov ds,ax
96 ;Инициализация селектора сегмента стека
97 mov ax,24 ; Селектор сегмента стека
98 mov ss,ax
99 ;Инициализация селектора ES и вывод символов на экран
100 mov ax,32 ; Селектор сегмента видеобуфера
101 mov es,ax
102 mov ebx,800 ; Начальное смещение на экране
103;Вывод сообщения на экран
104 lea esi,mes1
105 mov ah,attr
106 screen:
107 mov al,[esi]
108 or al,al
109 jz scend ; Выход, если нуль (терминатор сообщения)
110 mov es:[bx],ax ; Вывод символа в видеобуфер
111 add ebx,2 ; Следующий адрес на экране
112 inc esi ; Следующий символ
113 jmp screen ; Цикл
114 scend: ; Конец вывода сообщения
115 ;Подготовка перехода в реальный режим
116 ;*****************************************************
117 ;Формирование и загрузка дескрипторов для реального режима
118 mov gdt_data.lim,0ffffh ; Запись значения
119 mov gdt_code.lim,0ffffh ; границы в 4 ис-
120 mov gdt_stack.lim,0ffffh ; пользуемых нами
121 mov gdt_screen.lim,0ffffh ; дескриптора
122 ; Для перенесения этих значений в теневые регистры необходимо
123 ; записать в сегментные регистры соответствующие селекторы
124 mov ax,8 ; Загрузка теневого регистра
125 mov ds,ax ; сегмента данных
126 mov ax,24 ; Загрузка теневого регистра
127 mov ss,ax ; сегмента стека
128 mov ax,32 ; Загрузка теневого регистра
129 mov es,ax ; дополнительного сегмента
130 ;Сегментный регистр CS программно недоступен, поэтому его
131 ; загрузку опять выполняем косвенно с помощью искусственно
132 ; сформированной команды дальнего перехода
133 db 0eah ; Код команды дальнего перехода
134 dw offset go ; Смещение
135 dw 16 ; Селектор сегмента кода
136 ;Переключение режима процессора
137 go: mov eax,cr0 ; Чтение cr0
87 ; Загрузка в CS селектор сегмента кода, а в IP смещения следующей 88 ; команды (при этом и очищается очередь команд) 89 db 0eah ; Код команды far jmp 90 dw offset continue ; Смещение 91 dw 16 ; Селектор сегмента команд 92 continue: 93 ;Инициализация селектора сегмента данных 94 mov ax,8 ; Селектор сегмента данных 95 mov ds,ax 96 ;Инициализация селектора сегмента стека 97 mov ax,24 ; Селектор сегмента стека 98 mov ss,ax 99 ;Инициализация селектора ES и вывод символов на экран 100 mov ax,32 ; Селектор сегмента видеобуфера 101 mov es,ax 102 mov ebx,800 ; Начальное смещение на экране 103;Вывод сообщения на экран 104 lea esi,mes1 105 mov ah,attr 106 screen: 107 mov al,[esi] 108 or al,al 109 jz scend ; Выход, если нуль (терминатор сообщения) 110 mov es:[bx],ax ; Вывод символа в видеобуфер 111 add ebx,2 ; Следующий адрес на экране 112 inc esi ; Следующий символ 113 jmp screen ; Цикл 114 scend: ; Конец вывода сообщения 115 ;Подготовка перехода в реальный режим 116 ;***************************************************** 117 ;Формирование и загрузка дескрипторов для реального режима 118 mov gdt_data.lim,0ffffh ; Запись значения 119 mov gdt_code.lim,0ffffh ; границы в 4 ис- 120 mov gdt_stack.lim,0ffffh ; пользуемых нами 121 mov gdt_screen.lim,0ffffh ; дескриптора 122 ; Для перенесения этих значений в теневые регистры необходимо 123 ; записать в сегментные регистры соответствующие селекторы 124 mov ax,8 ; Загрузка теневого регистра 125 mov ds,ax ; сегмента данных 126 mov ax,24 ; Загрузка теневого регистра 127 mov ss,ax ; сегмента стека 128 mov ax,32 ; Загрузка теневого регистра 129 mov es,ax ; дополнительного сегмента 130 ;Сегментный регистр CS программно недоступен, поэтому его 131 ; загрузку опять выполняем косвенно с помощью искусственно 132 ; сформированной команды дальнего перехода 133 db 0eah ; Код команды дальнего перехода 134 dw offset go ; Смещение 135 dw 16 ; Селектор сегмента кода 136 ;Переключение режима процессора 137 go: mov eax,cr0 ; Чтение cr0 21
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »