Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.07;
Скачать: CL | DM;

Вниз

Array char -> String   Найти похожие ветки 

 
Б   (2009-12-11 09:42) [0]

Здрасти!

Как сделать присваивание Buffer Name? (array char -> string)


Var
 Name: string;
 Buffer: array [0..11] of Char;
begin  



 
Б   (2009-12-11 09:46) [1]

Вопрос закрыт.


 
Сергей М. ©   (2009-12-11 09:46) [2]

Зачем это надо - плодить одни и те же данные, но в разных ипостасях ?

К данным, которые хранит тип string, можно преспокойно обращаться как к массиву символов.


 
Б   (2009-12-11 09:56) [3]


> Зачем это надо - плодить одни и те же данные, но в разных
> ипостасях ?


Да это пример в DRKB такой.
Там функция определяет вендор CPU на Асме, возвращает TVendor = array [0..11] of Char. Ну т.к. Асм я не знаю, (чтобы заменить) то пришлось сделать обёртку под String.


 
Сергей М. ©   (2009-12-11 09:58) [4]

Приведи полный текст этой ф-ции ..


 
Б   (2009-12-11 10:02) [5]

DRKB:



type

TVendor = array[0..11] of char;

.........................

function GetCPUVendor: TVendor; assembler; register;

asm

PUSH EBX {Save affected register}

PUSH EDI

MOV EDI,EAX {@Result (TVendor)}

MOV EAX,0

DW $A20F {CPUID Command}

MOV EAX,EBX

XCHG EBX,ECX {save ECX result}

MOV ECX,4

@1:

STOSB

SHR EAX,8

LOOP @1

MOV EAX,EDX

MOV ECX,4

@2:

STOSB

SHR EAX,8

LOOP @2

MOV EAX,EBX

MOV ECX,4

@3:

STOSB

SHR EAX,8

LOOP @3

POP EDI {Restore registers}

POP EBX

end;



 
Б   (2009-12-11 10:03) [6]

Это я обётки сморганил. ;)



// Определяет производителя CPU.
Function XCPUVendor: string;
Type
 TVendor = array [0..11] of Char;

 Function CPUVendor: TVendor; assembler; register;
 Asm
   PUSH EBX               // Save affected register.
   PUSH EDI
   MOV  EDI,  EAX         // @Result (TVendor).
   MOV  EAX,  0
   DW   $A20F             // CPUID Command.
   MOV  EAX,  EBX
   XCHG EBX,  ECX         // Save ECX result.
   MOV  ECX,  4

   @1:  STOSB
        SHR   EAX, 8
        LOOP  @1
        MOV   EAX, EDX
        MOV   ECX, 4
   @2:  STOSB
        SHR   EAX, 8
        LOOP  @2
        MOV   EAX, EBX
        MOV   ECX, 4
   @3:  STOSB
        SHR   EAX, 8
        LOOP  @3
        POP   EDI         // Restore registers.
        POP   EBX
 End;

begin
 Result:= CPUVendor;
End;


 
Сергей М. ©   (2009-12-11 10:34) [7]

Вот заточенная под String:
function CPUVendor: String;
asm
 MOV  EDX, 12
 CALL System.@LStrSetLength
 PUSH EBX               // Save affected register.
 PUSH EDI
 MOV  EDI, [EAX]         // @Result (String).
 MOV  EAX,  0
 DW   $A20F             // CPUID Command.
 MOV  EAX,  EBX
 XCHG EBX,  ECX         // Save ECX result.
 MOV  ECX,  4
@1:  STOSB
 SHR   EAX, 8
 LOOP  @1
 MOV   EAX, EDX
 MOV   ECX, 4
@2:  STOSB
 SHR   EAX, 8
 LOOP  @2
 MOV   EAX, EBX
 MOV   ECX, 4
@3:  STOSB
 SHR   EAX, 8
 LOOP  @3
 POP   EDI         // Restore registers.
 POP   EBX
end;


 
Б   (2009-12-11 10:37) [8]

Спасибо. ;)


 
Anatoly Podgoretsky ©   (2009-12-11 12:21) [9]

> Б  (11.12.2009 10:03:06)  [6]

Нет нужды в DW, когда можно просто CPUID


 
Б   (2009-12-11 13:16) [10]


> Нет нужды в DW, когда можно просто CPUID


Если честно, то я ничего не понял. ;)
Я Асм не "понимать".


 
clickmaker ©   (2009-12-11 13:19) [11]

это команда x86 совместимых процессоров, для определения самих себя
собственно A20F - это ее код
в совсем уж старых процах ее нет



Страницы: 1 вся ветка

Текущий архив: 2010.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-1233828628
ganda
2009-02-05 13:10
2010.02.07
Поднять мусор из базы данных FireBird 1/5


11-1211311083
Vinum
2008-05-20 23:18
2010.02.07
Крутим колесико над PaintBox


4-1228475749
[RU].banOK
2008-12-05 14:15
2010.02.07
Пр0блемка с T00lHelp32


2-1260371106
Timur&Co
2009-12-09 18:05
2010.02.07
Прозрачность TListView


15-1259877728
kyn66
2009-12-04 01:02
2010.02.07
Странно ветка исчезла.