Форум: "Начинающим";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c