Скачиваний:
29
Добавлен:
15.09.2014
Размер:
92.16 Кб
Скачать

PSP

смещение

длина

содержимое

0

2

в

3. my_9h proc in al,60h cmp al,01h je fin iret fin: push ds es dx mov ax,2509h lea dx, old_09h int 21h mov ax,252fh lea dx,old_2fh

int 21h mov es,cs:2Ch mov ah,49h int 21h

push cs pop es mov ah,49h int 21h pop dx es ds iret my_9h endp RES=$ init proc push cs

pop ds int 2fh cmp al,0ffh je exit mov ax, 352fh int 21h mov word ptr CS:old_2fh,bx

mov word ptr CS:old_2fh+2,es mov ax,seg my_2fh mov ds,ax mov ax,252fh lea dx, my_2fh int 21h {09h} mov ax,3100h mov dx,(res-main+10fh)/16 int 21h exit: mov ax, 4c00h int 21h init endp

ызов INT 20h (CDh, 20h)

2

2

сегмент верхней границы памяти

6

4

far call к диспетчеру функций DOS

0Ah

4

адрес обработчика завершения программ (INT 22h)

0Eh

4

адрес обработчика нажатия Ctrl+Break (INT 23h)

12h

4

адрес обработчика критических ошибок (INT 24h)

16h

2

сегмент PSP программы-предка

18h

20

таблица открытых файлов программы

2Ch

2

сегмент среды программы

32h

1

max число открытых файлов (FILES)

34h

4

far-указатель на таблицу открытых

файлов программы

5Ch

16

неоткрытый FCB номер 1 (для 1-го параметра)

6Ch

16

неоткрытый FCB номер 2 (для 2-го параметра)

80h

1

количество символов в командной строке

81h

127

символы из командной строки DOS + CR

Итак, векторная таблица связи MS/DOS:

(-2) 2 mcb_seg сегмент первого управляющего блока памяти (MCB)

(0) 4 dev_cb указатель на первый блок управления устройствами DOS (DOS Device Control Block)

(+4) 4 file_tab указатель на таблицу файлов DOS

(+8) 4 clock_dr указатель на драйвер CLOCK$, установленный или резидентный

(+12) 4 con_dr указатель на актуальный драйвер CON, установленный или резидентный

--------------- DOS 3.x, 4.x----------------

(+16) 2 max_btbl максимальное число байт в блоке блочного устройства

(+18) 4 disk_buf указатель на первый дисковый буфер

(+22) 4 drv_info указатель на массив информации об устройствах

(+26) 4 fcb_tabl указатель на таблицу FCB

(+30) 2 fcb_size размер таблицы FCB

(+32) 1 num_bdev число блочных устройств

(+33) 1 lastdriv значение LASTDRIVE в файле CONFIG.SYS (по умолчанию равно 5)

(+34) null_dr начало драйвера NUL - первого драйвера в списке драйверов DOS

8. new_09 proc push ax dx in al,60h cmp al, 85h jne exit mov ah,9h lea dx,ms int 21h mov ind,1 exit: pop dx ax jmp dword ptr old_9h ret

new_09 endp

9. txt segment'code' assume ss:txt,ds:dta,es:dta ,ss:stk begin: mov ax,dta mov ds,ax mov ax, zseg mov dx,es sub ax,dx mov bx,ax mov ah, 4ah int 21h push ds pop es mov ah,4bh mov al,0 lea bx,param lea dx,child int 21h mov ah, 4ch int 21h txt ends dta segment 'data' param dw envseg dd 0 dd fcb1 dd fcb2 fcb1 db 0fcb2 db 0 child1 db 'mf.exe',0 dta ends stk segment 'stack' dw 256 dup(?) stk ends envseg segment

name_file db 'tx.txt$',0 envseg ends zseg segment 'zseg' zseg ends end begin dta segment 'data' name db 30 dup (?) dta ends

stk segment 'stack' dw 100 dup(?) stk ends

txt segment 'code' assume cs:txt,ds:dta,es:dta ,ss:stk my_proc proc mov ax, dta mov ds,ax

mov ax,es:2ch mov es,ax mov bx,0 xor si,si

xor di,di cld replay: mov al,byte ptr es:[si+bx]

cmp al,0 je exit mov name[di],al inc bx inc di

jmp replay exit: mov ah,4ch int 21h txt ends

11. ПЗУ BIOS содержит по адресу FFFF:FFFE байт, значение которого можно использо-вать для идентификации типа компьютера:

FF оригинальный IBM PC; FE XT, Por-table PC; FD PCjr; FC AT; FB XT с памятью 640 К на материнской плате;

FA PS/2 модель 25 или 30; F9 Conve-rtible PC; F8 PS/2 модели 55SX, 70, 80;

9A Compaq XT, Compaq Plus; 30 Sperry PC; 2D Compaq PC, Compaq Deskpro

Более подробную информацию можно получить, вызвав функцию C0h прерыва-ния BIOS INT 15h: AH = C0h выход:

ES:BX = адрес таблицы конфигурации, таблица находится в ПЗУ BIOS;

CF = 0 при успешном вызове прерывания;

CF = 1 если данная версия BIOS неподде-рживает функцию C0h.После выполнения прерывания регистры ES:BX будут указы-вать на таблицу в области ПЗУ BIOS. В этой таблице имеется более точная инфор-мация о типе компьютера, номер версии BIOS, сведения об аппаратных особеннос-тях конкретной модели.

12. 40h - канал 0; 41h - канал 1; 42h - канал 2; 43h - управляющий регистр.

0: 0 - двоичный счет; 1 - двоично-десяти-чный счет.

1-3: режимы 0-5

4,5: 00 - код команды CLC (запомнить CE) 01 - чтение/запись старшего байта; 10 - чтение/запись младшего байта;

11 - чтение/запись младшего, затем ста-ршего байта.

6,7: 00 - канал 0; 01 - канал 1; 10 -канал 2;

11 - код команды RBC (чтение состояния канала).

Для программирования канала таймера необходимо выполнить следующую после-довательность действий: * вывести в порт управляющего регистра с адресом 43h управляющее слово; * требуемое значение счетчика посылается в порт канала (адреса 40h...42h), причем вначале выводится мла-дший,а затем старший байты значения счетчика. Сразу после этого канал таймера начнет выполнять требуемую функцию.

13. mov cx,10 p: push cx mov ah,02h int 1ah

call transfer mov h,ch mov m,cl mov s,dh xor ax,ax mov al,m xor cx,cx mov cl,s mul cx mov t,ax p1: mov ah,02h int 1ah call transfer

mov hh,ch mov mm,cl mov ss,dh call time

cmp al,1 jne p1 pop cx loop p

transfer proc mov al,ch xor ah,ah mul 10 and ch,fh add ch,al .... ret transfer endp

15В КМОП-памяти хранится текущее вре-мя и дата, сведения о конфигурации систе-мы, результат тестирования при включе-нии питания и другая информация, приве-денная в следующей таблице:

00h - 0Dh Используются часами реального времени 0Eh Байт состояния диагностики при включении питания 0Fh Байт состоя-ния отключения 10h Тип используемого НГМД 11h Зарез 12h Тип НМД (если тип меньше 15) 13h Зарез 14h Конфигурация оборудования 15h - 16h Объем основной памяти 17h - 18h Объем расширенной па-мяти 19h Тип первого НМД (если тип > 15) 1Ah Тип второго НМД (если тип > 15)

1Bh - 20h Зарез 21h - 2Dh Зарез 2Eh - 2Fh Контрольная сумма ячеек 10h - 20h 30h - 31h Объем расширенной памяти 32h Текущее столетие в двоично-десятичном коде 33h Различная информация 34h - 3Fh Зарез

После анализа BIOS записывает в свою область данных по адресу 0000h:0410h слово конфигурации. Отдельные биты этого слова содержат информацию о наличии в системе различного обору-дования. Это слово можно получить с помощью прерывания INT 11h, которое возвращает его в регистре AX.

16. Существуют три типа команд операций:

* Маскирование запросов прерывания.

* Команды обработки конца прерывания.

* Опрос регистров и специальное маскирование.

19. new9 proc in al,60h cmp al,44h je nx call old9 jmp exit nx: in al,21h or al,64 out 21h,al

exit: iret new9 endp new13 proc cmp ah,2 je ex cmp ah,5 je ex cmp ah,11h je ex call old13

ex: iret new13 endp

20. mov cx,10 p: cmp i,0 jne p mov ax,0c0ah

lea dx,buf int 21h mov i,1 loop p

new8 proc call ds:old8 cmp i,0 je ex inc ind mov ax,ind cmp ax,182 jne ex mov ind,0 mov ah,9 lea dx,ms int 21h mov al,0b6h out 43h,al

mov al,11190 out 42h,al in al,61h or al,3 out 61h,al call delay and al,fch out 61h,al mov i,0

ex: iret new8 endp

21. new9 proc in al,60h cmp al,47h jne nx mov al,[40h:17h] shl al,4 shr al,6 cmp al,3

jne nx cmp ind,0 jne n mov ind,1 jmp nx n:

mov ind,0 nx: cmp ind,1 jne ex mov al,0b6h

out 43h,al mov ax,11956 out 42h,al mov al,ah

out 42h,al in al,61h or al,3 out al,61h ex: call old9 iret new9 endp

21. new9 proc in al,60h cmp al,47h jne nx

mov al,[40h:17h] shl al,4 shr al,6 cmp al,3 jne nx cmp ind,0 jne n mov ind,1 jmp nx n: mov ind,0 nx:cmp ind,1 jne ex mov al,0b6h out 43h ,al mov ax,11956 out 42h,al mov al,ah out 42h,al in al,61h or al,3 out al,61h ex: call old9

iret new9 endp

22. new9 proc mov al,[40h:17h] shl al,5 shr al,5 cmp al,5 jne ex cmp al,6 jne ex mov ah, 13h mov al,0 mov cx,len mov bl,46h mov dx,ffh lea es:bp,ms int 10h ex: iret new9 endp

23. new9 proc in al,60h cmp al,3bh jne nx mov dx,word ptr old9 mov ax,word ptr old9+2

mov ds,ax mov ax,2509h int 21h mov es, cs:2Ch mov ah,49h int 21h push cs pop es mov ah,49h int 21h jmp ex nx: cmp al,3ch

jne ex mov ah,13h mov bh,0 mov al,0 mov cx,ln mov bl,23h xor dx,dx lea es:bp,ms int 10h ex: call old9 iret new9 endp

28. new9 proc in al,60h cmp al,3bh jne ex

mov al,[40h:17h] shl al,5 shr al,5 cmp al,5 jne ex cmp al,6 jne ex xor si,si xor di,di mov cx, 41 p: push cx mov cx,26 p1: push cx mov ah,2

mov bh,0 dec cl mov dh,cl mov cx,si mov dl, cl int 10h mov ah,8 mov bh,0 int 10h mov s,ax

mov ah,2 mov bh,0 dec cl mov dh,cl mov cx, si add cx,40 mov dl,cl int 10h mov ah,8 mov bh,0 int 10h mov s1,ax mov bl,ah mov ah,9

mov cx,1 int 10h mov ah,2 dec cl mov dh,cl

mov cx,si mov dl,cl int 10h mov ax,s1 mov bl,ah mov ah,9 mov cx,1 int 10h pop cx loop p1 pop cx loop p ex: call cs:old9 ret new9 endp

33. new8 proc call old8 cmp ind,0 je ex inc k

cmp k,182 jne ex mov ah,6 mov al,0 mov bh,7

xor cx,cx mov dl,79 mov dh,24 int 10h mov k, 0 ex: iret new8 endp new9 proc in al,60h cmp al,44h jne exx mov ind,1 exx: iret new9 endp

25. cseg segment public 'code' assume cs:cseg, ds:dta, ss:stk start proc far mov ax, dta mov ds, ax mov ax, es mov bx, Zseg sub bx, ax mov ah, 4ah int 21h mov ah, 48h mov bx, 256/16+1 int 21h mov segoverl, ax mov ax, dta mov es, ax lea bx, blkpr mov ax, segoverl

mov [bx], ax mov [bx+2], ax lea dx, flnm mov ah, 4bh mov al, 3 int 21h call dw ord ptr ffovrl mov ah, 4ch int 21h start endp cseg ends

stk segment stack 'stack' dw 128 dup (?) stk ends dta segment public 'data' offovrl dw 0

segoverl dw ? flnm db '1.asm',0 blkpr dd 0

dta ends Zseg segment Zseg ends end start

cseg segment public 'code' assume cs:cseg, ds:dseg, ss:stk overl proc far push ds mov ax, dseg mov ds, ax mov ah, 9 lea dx, mesg int 21h pop ds ret overl endp cseg ends stk segment stack 'stack' dw 128 dup (?) stk ends

dseg segment public 'data' mesg db 'working$'

dseg ends end

35. new9 proc mov al,[40h:17h] shl al,5 shr al,5 cmp al,4 jb ex mov ah,13h mov al,0 mov bl,43h mov cx,1 mov dx,aah lea es:bp,ms int 10h iret new9 endp

36. new9 proc call dword ptr old9 in al,60h

cmp al,40h jne ex mov ah,5 mov al,1 int 10h

mov ah,13h mov al,0 mov bl,45h mov cx,1 lea es:bp,ms int 10h mov ah,5 mov al,0 int 10h ex: iret new9 endp

37. new8 proc call dword ptr old8 mov ah,02h int 1ah cmp cl,h je ex mov h,cl inc I cmp i,5 jne ex mov i,0 mov ah,13h mov al,0 mov bl,40h mov cx,0 lea es:bp,ms int 10h ex: iret new8 endp

39. txt segment'code' assume cs:txt,ds:dta ,es:dta ,ss:stk begin: mov ax,dta mov ds,ax

mov ax,zseg mov dx,es sub ax,dx mov bx,ax

mov ah,4ah int 21h push ds pop es mov ah, 4bh mov al,0 lea bx,param lea dx,child int 21h

mov ah,4ch int 21h txt ends dta segment 'data'

param dw envseg dd 0 dd fcb1 dd fcb2 fcb1 db 0 fcb2 db 0 child1 db 'makefile.exe',0 dta ends stk segment 'stack' dw 256 dup(?)

stk ends envseg segment name_file db 'text.txt$',0 envseg ends zseg segment 'zseg'

zseg ends end begin

dta segment 'data' name db 30 dup (?) dta ends

stk segment 'stack' dw 100 dup(?) stk ends

txt segment 'code' assume cs:txt,ds:dta ,es:dta,ss:stk my_proc proc mov ax, dta mov ds,ax mov ax,es:2ch mov es,ax mov bx,0 xor si,si xor di,di cld replay: mov al,byte ptr s:[si+bx] cmp al,0 je exit mov name[di],al

inc bx inc di jmp replay exit: mov ah,4ch int 21h txt ends end my_proc

47. * возможность непосредственной адре-сации памяти за пределами первого мб;

* для процесоров i80386 и i80486 реализо-ван механизм страничной виртуальной па-мяти, позволяющий программам работать с памятью, размер которой может быть мно-го больше физической оперативной памя-ти, установленной в компьютере; *аппара-тная поддержка мультизадачности позво-ляет создавать на основе процессоров, Ра-ботающих в защищённом режиме высо-копроизводительные мультизадачные и му-льтипользовательские системы; * эффек-тивная работа нескольких программ, сос-тавленных для MS-DOS, основанная на ис-пользовании виртуального режима работы процессора.

48. регистр флагов процессора i80286 называется FLAGS и представляет собой младшее 16-разрядное слово регистра EFLAGS 0 - CF Флаг переноса

1 - 1 Зарезервировано и равно 1

2 - PF Флаг чётности

3 - 0 Зарезервировано и равно 0

4 - AF Флаг вспомогательного переноса

5 - 0 Зарезервировано и равно 0

6 - ZF Флаг нуля

7 - SF Флаг знака

8 - TF Флаг ловушки

9 - IF Флаг разрешения прерываний

10 - DF Флаг направления

11 - OF Флаг переполнения

12-13 - IOPL Уровень привилегий ввода/вывода

14 - NT Флаг вложенной задачи

15 - 0 Зарезервировано и равно 0

16 - RF Флаг возобновления (только i80386 и i80486)

17 - VM Флаг режима виртуального процессора 8086 (только i80386 и i80486)

18 - AC Флаг проверки выравнивания (только i80486)

19-31 - 0 Зарезервировано и равно 0

CR0 Регистр состояния процессора

CR1 Зарезервирован

CR2 Линейный адрес отказа страницы

CR3 Базовый адрес каталога страницы

49 Длина дескриптора составляет 8 байт. Он состоит из следующих полей:

* поле базового адреса длиной 24 бита содержит физический адрес сегмента, описываемого данным дескриптором;

* поле предела содержит размер сегмента в байтах, уменьшенный на единицу;

* поле доступа описывает тип сегмента (сегмент кода, сегмент данных и др.);

* зарезервированное поле длиной 16 бит для процессора i80286 должно содержать нули, это поле используется процессорами i80386 и i80486 (там, в частности, хранится старший байт 32-разрядного базового адреса сегмента).

50. * Подготовить в оперативной памяти глобальную таблицу дескрипторов GDT. В этой таблице должны быть созданы деск-рипторы для всех сегментов, которые бу-дут нужны программе сразу после того, как она переключится в защищённый режим. Впоследствии, находясь в защищённом ре-жиме, программа может модифицировать GDT (если, разумеется, она работает в нулевом кольце защиты). Программа мо*-ет модифицировать имеющиеся дескри-торы или добавить новые, загрузив заново регистр GDTR.

* Для обеспечения возможности возврата из защищённого режима в реальный необ-одимо записать адрес возврата в реальный режим в область данных BIOS по адресу 0040h:0067h, а также записать в CMOS-память в ячейку 0Fh код 5. Этот код обес-ечит после выполнения сброса процессора передачу управления по адресу, подго-товленному нами в области данных BIOS по адресу 0040h:0067h.

* Запретить все маскируемые и нема-скируемые прерывания.

* Открыть адресную линию A20.

* Запомнить в оперативной памяти содер-жимое сегментных регистров, которые нео-бходимо сохранить для возврата в реаль-ный режим, в частности, указатель стека реального режима.

* Загрузить регистр GDTR.

Соседние файлы в папке Shpora