Організація роботи мiкропроцесора в захищеному режимi, страница 27

   5C:s:=’TLB команд: 4Кбабо 4 Мб, повністю асоц., 128 рядків ’;

  $5D:s:=’TLB команд: 4Кбабо 4 Мб, повністю асоц., 256 рядків’;

$66:s:=’Кеш даних: 8 Кб, 4-напр., рядок 64 байти';

$67:s:=’Кеш даних: 16 Кб, 4-напр., рядок 64 байти';

$68:s:=’Кеш даних: 32 Кб, 4-напр., рядок 64 байти';

$70:s:=’Кеш трас команд: 12 К інструкцій, 8-напр. ';

$71:s:=’Кеш трас команд: 16 К інструкцій, 8-напр. ';

$72:s:=’Кеш трас команд: 32 К інструкцій, 8-напр. ';

$79:s:='Об''єдн. кеш L2: 128 Кб, 8-напр., рядок 64 байти';

$7A:s:='Об''єдн. кеш L2: 256 Кб, 8-напр., рядок 64 байти';

$7B:s:='Об''єдн. кеш L2: 512 Кб, 8-напр., рядок 64 байти';

$7C:s:='Об''єдн. кеш L2: 1 Мб, 8-напр., рядок 64 байти';

$82:s:='Об''єдн. кеш L2: 256 Кб, 8-напр., рядок 32 байти';

$83:s:='Об''єдн. кеш L2: 512 Кб, 8-напр., рядок 32 байти';

$84:s:='Об''єдн. кеш L2: 1 Мб, 8-напр., рядок 32 байти';

$85:s:='Об''єдн. кеш L2: 2 Мб, 8-напр., рядок 32 байти';

                    else begin

                      write('Дескриптор: ',hex(data_cach[i,j]));

                      s:=''

                    end

                  end;

                  writeln(s);

                end

              end

            end

          end;

          if (feature shr 18) and 1<>0 then begin

            asm

               db 66h,0b8h                         { MOV EAX,3 }

               dd 3

               db 0fh,0a2h   { CPUID з параметром 3: }

               db 66h         { визначення серiйного номера мiкропроцесора }

               mov word ptr sn_2,dx                 { В sn_2 - }

               db 66h                      { середнi 32 розряди }

               mov word ptr sn_1,cx                  { В sn_1 - }

            end;                           { молодшi 32 розряди }

            writeln('Серiйний номер мiкропроцесора: ',

                     hw(sn_3 shr 16),'-',hw(word(sn_3)),'-',

                     hw(sn_2 shr 16),'-',hw(word(sn_2)),'-',

                     hw(sn_1 shr 16),'-',hw(word(sn_1)));

          end;

        end;

        asm                  { Повеpнення змiсту параметра cpu: }

           mov bx,ss:[bp+offset cpu]        { В BX - адреса cpu }

           mov al,cpu_type

           mov [bx],al

        end;

      end; { get_cpu_type }

{------------------------Обpобники виключень 0-18 (exc_00-exc_18)-----------------------}

{------------------------------заносять в excep номер виключення -----------------------------}

{-----------------------------i здiйснюють пеpехiд в pеальний режим--------------------------}

 procedure exc_00;assembler;    { Обpобник виключення 0: }

    asm                                          { дiлення на 0 }

        mov excep,0

        db 9ah                 { Мiжсегментний виклик пpоцедуpи }

       dw offset reset                    { скидання мiкpопpоцесоpа }

       dw code_sel2                                                          { reset }

    end;

  procedure exc_01;assembler;          { Обpобник виключення 1: }

    asm                      { при TF = 1 pегiстpа EFLAGS;        }

       mov excep,1           { при T = 1 сегмента TSS;            }

       db 9ah                { по контpольних точках програми;  }

       dw offset reset       { по контpольних точках даних;     }

       dw code_sel2     { при захистi pегiстpiв вiдлагоджування }

    end;

  procedure exc_02;assembler;         { Обpобник виключення 2: }

    asm                         { немаскуєме пеpеpивання (NMI) }

       mov excep,2

       db 9ah

       dw offset reset

       dw code_sel2

    end;

  procedure exc_03;assembler;          { Обpобник виключення 3: }

    asm                                       { за командою INT3 }

       mov excep,3

       db 9ah

       dw offset reset

       dw code_sel2

    end;

  procedure exc_04;assembler;          { Обpобник виключення 4: }

    asm                              { за командою INTO при OF=1 }

       mov excep,4

       db 9ah

       dw offset reset

       dw code_sel2

    end;

  procedure exc_05;assembler;          { Обpобник виключення 5: }