Реферат по предмету "Программирование, Базы данных"


Программа – резидент переключателя альтернативной кодировки (русификатор)

Институт ПереподготовкиКадров
    Уральского Государственного Технического Университета


             Кафедра микропроцессорной техники




                                Оценка работы





                               Члены комиссии


              ПРОГРАММА – РЕЗИДЕНТ               ПЕРЕКЛЮЧАТЕЛЯ АЛЬТЕРНАТИВНОЙ                    КОДИРОВКИ






                          Курсовая работа


                       Пояснительная записка







        Руководитель
        к.т.н. доцент                    В. П. Кулюкин





        Слушатель
        Группа СП-913                    А. А. Соколов








                        ЕКАТЕРИНБУРГ
                            1997





                          Содержание
                           


           ПОСТАНОВКАЗАДАЧИ...................-
          ВВЕДЕНИЕ............................3
                   1. ОПИСАНИЕ ПРОГРАММЫ...............4
           1.1 ОБРАБОТКА 09h...................7
                   1.2 ОБРАБОТКА 10h...................9
          ЗАКЛЮЧЕНИЕ..........................10
           БИБЛИОГРАФИЧЕСКИЙ СПИСОК...........11
           ПРИЛОЖЕНИЕ 1 ТЕКСТПРОГРАММЫ........12
















































                                                                    
                     ВВЕДЕНИЕ
 

      С самого начала существования IBM совместимых компьютеров всталапроблема вывода на экран и ввода с клавиатуры символов кириллицы. Тольконачиная с версии MS DOS 6.0 появиласьподдержка национальной 866 страницы. До появления версии MS DOS 6.0 проблему решали так называемыепрограммы русификаторы. Эти программы замещали символы дополнительного кодовогонабора. Делалось это путем подстановки шрифта прошитого в ПЗУ видеоадаптерасвоим. Эти программы были практически на каждом компьютере. Самыми известнымииз них являлись ENHFONT, KEYRUSS, LMSCR&LMKEY, KYRILLIC. Был еще один способ решить проблемурусификации — перепрограммировать ПЗУ видеоадаптера, но он не нашел большогоприменения.

















































1. ОПИСАНИЕ ПРОГРАММЫ


      Поскольку данная программа относиться ктипу программ, которые меняют шрифт загружающийся из ПЗУ видеоадаптера, тосначала она открывает файл находящийся в этом же каталоге в котором находитьсяшрифт 8х16. После этого программа читает 4096 байт и помещает их в буфер. Затемзагружаются полученные данные в видеобуфер, другими словами меняется текущийшрифт на новый. Следующий шаг программы это получение, сохранение и установкасвоих обработчиков 10h и 09h прерываний. После данных операцийпрограмма завершает работу и остается резидентной используя 27h прерывание, причем в регистре DX находится первый байт памяти послерезидентной части программы.
      Общая логика работы показана на рис. 1.1и 1.2


               Рис. 1.1

               Рис. 1.2













































                   1.1 ОБРАБОТКА INT 09h


Обработка 09h программой представлена на рис. 1.3 и1.4




               Рис. 1.3

                                          Рис.1.4

1.2 ОБРАБОТКА INT 10h


Обработка 10h программой представлена на рис. 1.5




           

               Рис. 1.5




ЗАКЛЮЧЕНИЕ


    Данная программа имеет следующиенедостатки:
·        Можетиспользоваться только в ДОС — режиме
·        Клавишапереключающая раскладки неизменяемая
·        Вовремя работы программы файл со шрифтом должен находиться в том же каталоге, гденаходится русификатор
·        Файлшрифта должен быть только с именем «8х16.fnt»
Неоспоримоедостоинство программы  — занимаемое месторезидентом в памяти.




















































БИБЛИОГРАФИЧЕСКИЙ  СПИСОК


1.   Абель П. Язык Ассемблера для IBM PC и  
программирования М.:Высшая школа, 1992. 447с.

2.    Гук М. Аппаратные средства IBM PC  СПб.: Питер, 
     1996. 224с.




























































                       ПРИЛОЖЕНИЕ 1

                     ТЕКСТ ПРОГРАММЫ  


.MODEL TINY ; Все сегменты в одном
.CODE       ; Как ком файл
.STARTUP
.286
LOCALS      ; Близкие переходы
JUMPS
jmp Install

RSHIFT_SCAN   EQU 36h; RSHIFT scan code
FLAGS record inRussian:1,shiftPressed:1,keyPressed:1,reserved:6
iFlags FLAGS
STable  db 'йцукенгшщзхъфывапpолджэячсмитьбюЙЦУКЕHГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ'
Hook09proc far; обpабока int 09h
pushax
pushbx
push cx
pushdi
pushds
pushes
mov  ax,cs    ; сегмент резидента
mov  ds,ax    ; данные в сегменте кода
in   al,60h   ; ситываем
mov  ah,al    ; и сохраняем
cmp  al,RSHIFT_SCAN  ;? правый
je   gotShift        ; пpовеpка нажатия
testal,80h          ; верхний регистр   
jnz  KeyUp           ; а может быть клавишу отпустили?нет ?
test[iFlags], MASK inRussian; выделяем флаг русского набора
jz   OldHook09       ; если в английском, то стаpыйобpаботчик
pushax
mov  ax,40h         
mov  es,ax           ; es = сегмент данных BIOS
pop  ax
cmp  al,34h          ; начало блока тpансляции
jg   OldHook09
cmp  al,2Ch
jl   check2
sub  al,2Ch               ; проверка не символьная
add  al,23                
jmp  short Translate
check2:
cmp  al,28h
jg   OldHook09
cmp  al,1Eh
jl   check3
sub  al,1Eh               ; ли это
add  al,12
jmp  short Translate
check3:
cmp  al,1Bh
jg   OldHook09
cmp  al,10h                
jl   OldHook09              ; клавиша
sub  al,10h            ; конец блока, al = смещение втаблице
Translate:
or   [iFlags], MASK keyPressed; выделяем флагнажатия клавиши
mov  ah,es:[17h]       ; а не нажат ли у нас shift
testah,11b            ;
jz   lowerKey          ; если не нижний регистр — то дальше
add  al,32             ; увеличиваем смещение в табл.символов
lowerKey:
mov  cx,es:[1Ah]; указатель на хвост буфеpаклавиатуpы (30-60)
mov  bx,es:[1Ch]       ; указатель на голову
cmp  cx,60             ; голова на хвосте? J

je   h_End             ; да — на хвост
inc  cx      ; сместимся
inc  cx
cmp  cx,bx; голова и хвост похожи ?
je   Quit ; тогда выходим
jmp  short insSymb ; ну тогда …
h_End:
cmp  bx,30  ; хвост на голове ?
je   Quit
insSymb:
mov  di, offset STable   ; di = указатель на таблицу символов
mov  ah,0                ; ax = смещение
add  di,ax
mov  al,[di]             ; al = символ
mov  es:[bx],al ; помещаем символ в буфеp клавиатуpы (int 16h)
cmp  bx,60           ; указатель хвоста дошел до конца?
jne  nextStep
mov  bx,28  ; иначе переопределяем указатель
nextStep:
inc  bx    ; и еще разок
inc  bx
mov  es:[1Ch],bx ; предаем его значение в положенное место
jmp  short Quit  ; конец, символ отpанслиpован
gotShift:
or   [iFlags], MASK shiftPressed   ; взводим флаг нажатия shift
and  [iFlags], NOT MASK keyPressed   ; обнуляем — клавиши
jmp  short OldHook09
KeyUp:
and  al,7Fh            ; убиpаем бит отпускания клавиши
cmp  al,RSHIFT_SCAN
jne  OldHook09         ; если не shift — стаpый обpаботчик
test[iFlags], MASK keyPressed
jnz  throwShift      ; если нажимали клавишу — сбpасываемshift
test[iFlags], MASK inRussian
jz   switchRussian         ; если в английском — то на pусский
and  [iFlags], NOT MASK inRussian  ; а тут на английский
jmp  short OldHook09
switchRussian:
or   [iFlags], MASK inRussian
jmp  short OldHook09
throwShift:
and  [iFlags], NOT MASK shiftPressed; сбpасываемпpизнак   
                                     ; нажатияshift
OldHook09:
pop  es
pop  ds
pop  di
pop  cx
pop  bx
pop  ax
db   0EAh                 ; оптикод far jump
OldHandler09dd ?         ; jump xxxx:yyyy
Quit:
in   al,61h             ; сбрасываем контроллер клавиатуры
mov  ah,al              ; и разрешаем обработку след.симв.
or   al,80h             ; клавиатура блокирована ?
out  61h,al             ; сообщаем контроллеру
xchgah,al              ; снимаем блокировку
out  61h,al            
mov  al,20h      ; разрешение обработки аппаратных прерываний
out  20h,al      ;  8259А


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.