Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с проблемой 
:(
    Опции темы
_El_
Дата 25.9.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне необходимо в Turbo Pascal  вставить ассемблерый код. Но почему-то не все функции работают корректино (cpuid вообще не работает, ругается на регистры eax, ebx, ecx, edx).  Может что-то подключть надо... Помогите
PM MAIL   Вверх
volvo877
Дата 25.9.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



_El_, во-первых, поменяй название темы (ибо Правила, п.1), а во-вторых - Turbo Pascal есть 16-битная программа, причем довольно старая, и она не имеет ни малейшего представления ни о eax/ebx/ecx, ни о CPUID... Приведи тот код, который надо вставить, может чего и посоветуем...
PM MAIL   Вверх
_El_
Дата 26.9.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне необходимо осуществить привязку программы к железу. Хотела для этого воспользоваться CPUID - для получения серийного номера процессора. На каком компиляторе Pascal это возможно и как?

Это сообщение отредактировал(а) _El_ - 26.9.2007, 06:45
PM MAIL   Вверх
volvo877
Дата 26.9.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Цитата(_El_ @  26.9.2007,  05:29 Найти цитируемый пост)
Хотела для этого воспользоваться CPUID - для получения серийного номера процессора.

Во-первых, серийный номер есть не у всех типов процессоров, а во-вторых (даже если он есть), для его получения необходимо совпадение дополнительных условий (которые очень часто НЕ совпадают), так что привязка может получиться очень шаткая ...
PM MAIL   Вверх
_El_
Дата 26.9.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как тогда лучше и надежнее привязать программу к железу?
PM MAIL   Вверх
Virtuals
Дата 28.9.2007, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может к серийнику винта? (ID сектор винта, там много какой информации)

ЗЫ программа под какой операционкой работать будет (это очень важно)

Это сообщение отредактировал(а) Virtuals - 28.9.2007, 05:04
PM MAIL ICQ   Вверх
_El_
Дата 28.9.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программа будет работать под ms-dos
PM MAIL   Вверх
ILyAHA
Дата 29.9.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гламурный хакер
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 30.3.2007
Где: Ярославская обл. г.Рыбинск

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



Можно сделать подключаемый объектный(ассемблеровский) модуль. Там прописать дерективы для работы eax...
Делаеш ссылку в паскале на этот объектный файлик и радуешся smile 
--------------------
<sсriрt>alert('xss')</sсriрt>
PM MAIL   Вверх
Virtuals
Дата 30.9.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ID Винта лови ...
за код ногами не бить, писано давно и в качестве заготовки. Главное принцип smile 
Код

uses tpcrt,tpstring;
type

  IDEInfo = Record
    Config,                              {General configuration bit-significant information}
    Cyls,                                {Number of logical cylinders}
    Unused,                              {Reserved}
    Heads,                               {Number of logical heads}
    BPT,                                 {Number of unformatted bytes per track}
    BPS,                                 {Number of unformatted bytes per sector}
    SPT         : Word;                  {Number of logical sectors per logical track}
    Vendor      : Array [0..2] of Word;  {Vendor specific}
    Serial      : Array [1..20] of Char; {Serial number. 20 ASCii characters, 0000H=not specified}
    BufType,                             {Buffer type}
    BufSize,                             {Buffer size in 512 byte increments. 0000H=not specified}
    ECC         : Word;                  {# of ECC bytes avail on read/write long cmds. 0000H=not spec.}
    Revision    : Array [1..8] of Char;  {Firmware revision. 8 ASCii characters. 0000H=not specified}
    Model       : Array [1..40] of Char; {Model number. 40 ASCii characters. 0000H=not specified}
    Features    : Word;                  {Features information}
    DwordIO     : Word;                  {0001H=Can perform doubleword I/O}
    Capabil     : Word;                  {Capabilities}
    Reserved    : Word;                  {Reserved}
    PIO         : Word;                  {PIO data transfer information}
    DMA         : Word;                  {DMA data transfer information}
    ExtValid    : Word;                  {Extended data validation information}
    CurrCyls,                            {Number of current logical cylinders}
    CurrHeads,                           {Number of current logical heads}
    CurrSect    : Word;                  {Number of current logical sectors per track}
    Capacity    : LongInt;               {Current capacity in sectors}
    BlockMode   : Word;                  {Multiple sectors transfer information}
    LBACapacity : LongInt;               {Total number of user addressable sectors. LBA mode only}
    SingleDMA   : Word;                  {Single word DMA transfer information}
    MultiDMA    : Word;                  {Multiword DMA transfer information}
    AdvancedPIO : Word;                  {Advanced PIO Transfer information}
    MinDMACycle : Word;                  {Minimum Multiword DMA Transfer Cycle Time Per Word in nsecs}
    RecDMACycle : Word;                  {Manufacturer Recommended Multiword DMA Transfer Cycle Time}
    MinPIOCycle : Word;                  {Minimum PIO Transfer Cycle Time Without Flow Control in nsecs}
    MinIORDYPIOCycle : Word;             {Minimum PIO Transfer Cycle Time With IORDY Flow Control in nsecs}
    Filler : Array [1..374] of Byte;
  end;

var x:word;
    Buff:IDEInfo;
    Buffk:array[0..$300] of byte absolute Buff;
    TMRL,TMRH:Word;
    TM,tmm:Word;
const
    contr:word= $01F0;{ $0170; second}
    vint :Byte= $a0;
    PPR :Word= $0000;

procedure StartTimer; assembler;
asm
push dx
push ax
  xor ax,ax
  MOV TMRH,AX
  MOV AX,0FFFFH
  MOV TMRL,AX
  mov dx,61h
  in   al,dx
  and  al,0FCh         ;{Speaker - off}
  out  dx,al
  mov  al,0B4h         ;{10110110b - Channel 2, mode 2, both hi&lo bytes}
  mov  dx,43h
  out  dx,al           ;{Out to command register}
  mov  ax,0000h        ;{Counter value - maximum: FFFFh}
  mov  dx,42h
  out  dx,al           ;{Out lo byte to channel 2}
  mov  al,ah
  out  dx,al           ;{Out hi byte to channel 2}
  mov  dx,61h
  in   al,dx
  or   al,01h
  out  dx,al
pop ax
pop dx
{retn}
end;

{──────────────────────────────────────────────────────────────────────}
function ReadTimer : Word; assembler;
{Stop timer and read value}
Label UP;
asm
push bx
push ax
push dx
  mov    dx,42h
  in      al,dx
  mov     bl,al
  in      al,dx
  mov     bh,al
  neg     bx
  mov    dx,61h
{  in      al,dx
  and     al,0FDh
  out     dx,al
}
{cmp bx,TMRL
ja UP
inc TMRH
UP:
}
mov [TMRL],bx

cmp bx,0F000H
pop dx
pop ax
pop bx
{retn}
end;

{──────────────────────────────────────────────────────────────────────}
function PPP:Byte;assembler;
label  {ppp,}ppp1,pppy,pppx,exitt;
asm
{ppp:}
    call starttimer
pppy:
    mov    dx,[contr]
    add    dx,7
    in    al,dx
    mov    ah,al
    cmp al,0ffh
    je  exitt
call readtimer
jae pppx
    and al,80h
    jnz pppy   {BUSY}
pppx:
    call ppp1
    mov  al,ah
    and    al,01h
    jnz    exitt
    mov    al,ah
    and    al,20h
    jnz    exitt
    mov al,bl  {AX-STAT_ERRS}
    retn
exitt:
call     ppp1
    mov al,bl  {AX-STAT_ERRS}
{    pop dx}
    retn
ppp1:
    push     dx
    push     ax
    mov dx,[contr]
    add dx,1
    in  al,dx
    mov bl,al
    pop ax
    pop dx
retn
end;
{──────────────────────────────────────────────────────────────────────}

procedure id;assembler;
label  cykl,reads,xxd;
asm
    mov  al,[vint]
    mov  dx,[contr]
    add  dx,6
    out  dx,al

    mov  al,0ech
    mov  dx,[contr]
    add  dx,7
    out  dx,al

call ppp

    mov  cx,100h
    mov  di, offset buff

cykl:
    call ppp {AX-STAT_ERRS}
    cmp ax,$5800
    jz xxd
    mov [PPR],ax
    retn
xxd:
    call reads
    xchg al,ah
    mov  word [di],ax
    add  di,2
    loop cykl
    retn
{+++++++++++++++++++++++++}
reads:
    mov [PPR],ax
    xor    ax,ax
    mov    dx,[contr]
    in    ax,dx
    push ax
    pop    ax
    retn

end;

 {**************************}
 Begin
 clrscr;
 {
 starttimer;
  readtimer;
 tmm:=tmrl;
 for tm:=0 to 900 do
 begin
  readtimer;
 if tmrl<tmm then inc(tmrh);
 tmm:=tmrl;
 end;
 writeLN('L-',tmrl,' H-',tmrh);
 }

 contr:= $01F0;
 ID;
 write('Продавец: ');
  for x:=0 to 2 do write(hexw(buff.Vendor[x]));
writeln('.');
 write('Серийный номер: ');
  for x:=1 to 20 do write(buff.Serial[x]);
writeln('.');

 write('Ревизия: ');
  for x:=1 to 8 do write(buff.Revision[x]);
writeln('.');

 write('Модель: ');
  for x:=1 to 40 do write(buff.Model[x]);
writeln('.');
 writeln('Cl: ',buff.Cyls);
 writeln('Hd: ',buff.Heads);
 writeln('SPT: ',buff.SPT);
 writeln('BPT: ',buff.BPT);
 writeln('BPS: ',buff.BPS);
 writeln('Capacity:',buff.Capacity);
 writeln('LBACapacity:',buff.LBACapacity);
{ writeln('CurrCyls: ',buff.CurrCyls);
 writeln('CurrHeads: ',buff.CurrHeads);
 writeln('CurrSect: ',buff.CurrSect);
}
 WRITELN('-------------------------------------------');
 contr:= $0170;
 vint := $a0;

 ID;writeln(hexw(ppr));
 write('Продавец: ');
  for x:=0 to 2 do write(hexw(buff.Vendor[x]));
writeln('.');
 write('Серийный номер: ');
  for x:=1 to 20 do write(buff.Serial[x]);
writeln('.');

 write('Ревизия: ');
  for x:=1 to 8 do write(buff.Revision[x]);
writeln('.');

 write('Модель: ');
  for x:=1 to 40 do write(buff.Model[x]);
writeln('.');
 writeln('Cl: ',buff.Cyls);
 writeln('Hd: ',buff.Heads);
 writeln('SPT: ',buff.SPT);
 writeln('BPT: ',buff.BPT);
 writeln('BPS: ',buff.BPS);
 writeln('Capacity:',buff.Capacity);
 writeln('LBACapacity:',buff.LBACapacity);
{ writeln('CurrCyls: ',buff.CurrCyls);
 writeln('CurrHeads: ',buff.CurrHeads);
 writeln('CurrSect: ',buff.CurrSect);
}
 end.



Это сообщение отредактировал(а) Virtuals - 30.9.2007, 17:20
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

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


 




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


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

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