mirror of
https://github.com/stasenso/SHA256.git
synced 2026-06-26 21:32:43 +03:00
Закончил Sha256Init
This commit is contained in:
@@ -4,3 +4,6 @@ main.exe
|
||||
sha-256.obj
|
||||
.vscode/tasks.json.etalon
|
||||
sha-256.dll
|
||||
sha-256.lib
|
||||
sha-256.exp
|
||||
|
||||
|
||||
Vendored
+100
@@ -0,0 +1,100 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Assemble",
|
||||
"type": "shell",
|
||||
"args": [
|
||||
"/c",
|
||||
"/Cp",
|
||||
"${fileBasenameNoExtension}.asm"
|
||||
],
|
||||
"command": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/ml64.exe",
|
||||
"problemMatcher": {
|
||||
"owner": "masm",
|
||||
"fileLocation": [
|
||||
"relative",
|
||||
"${workspaceFolder}"
|
||||
],
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d*)\\)\\s+:?\\s+(error|warning)\\s+([A-z]+\\d+):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"code": 4,
|
||||
"message": 5,
|
||||
"loop": true
|
||||
}
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "link",
|
||||
"type": "shell",
|
||||
"args": [
|
||||
"/LIBPATH:/includes",
|
||||
"/SUBSYSTEM:WINDOWS",
|
||||
"/entry:WinMain",
|
||||
"/LARGEADDRESSAWARE:NO",
|
||||
"${fileBasenameNoExtension}.obj"
|
||||
],
|
||||
"command": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/link.exe",
|
||||
"dependsOn": "Assemble"
|
||||
},
|
||||
{
|
||||
"label": "execute",
|
||||
"type": "shell",
|
||||
"command": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"dependsOn": "link",
|
||||
"problemMatcher":[]
|
||||
},
|
||||
{
|
||||
"label": "AssembleLib",
|
||||
"type": "shell",
|
||||
"args": [
|
||||
"/c", // Только ассемблирование, без сборки
|
||||
"/Cp", // Сохраняет регистр пользовательских символов (делает разницу между строчными и заглавными символами)
|
||||
///Zi", // Отладочная информация
|
||||
"${fileBasenameNoExtension}.asm"
|
||||
],
|
||||
"command": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/ml64.exe",
|
||||
"problemMatcher": {
|
||||
"owner": "masm",
|
||||
"fileLocation": [
|
||||
"relative",
|
||||
"${workspaceFolder}"
|
||||
],
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d*)\\)\\s+:?\\s+(error|warning)\\s+([A-z]+\\d+):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"code": 4,
|
||||
"message": 5,
|
||||
"loop": true
|
||||
}
|
||||
},
|
||||
"group": "build"
|
||||
},
|
||||
{
|
||||
"label": "linkDLL",
|
||||
"type": "shell",
|
||||
"args": [
|
||||
"/DLL",
|
||||
"/SUBSYSTEM:WINDOWS",
|
||||
"/DEF:sha-256.def",
|
||||
"/LIBPATH:C:/repo/SHA-256/includes/",
|
||||
"/entry:DllMain",
|
||||
"${fileBasenameNoExtension}.obj"
|
||||
],
|
||||
"command": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/link.exe",
|
||||
"dependsOn": "AssembleLib"
|
||||
}
|
||||
]
|
||||
}
|
||||
+191
-31
@@ -6,34 +6,91 @@ includelib includes\user32.lib
|
||||
OPTION PROLOGUE:none
|
||||
OPTION EPILOGUE:none
|
||||
.data
|
||||
AppName dw 0044h,004ch,004ch,0020h,0053h,006bh,0065h,006ch,0065h,0074h,006fh,006eh,0000h
|
||||
HelloMsg dw 0412h,044bh,0437h,0432h,0430h,043dh,0430h,0020h,0444h,0443h,043dh,043ah,0446h,0438h,044fh,0020h,0054h,0065h,0073h,0074h,0048h,0065h,006ch,006ch,006fh,0000h
|
||||
LoadMsg dw 0044h,004ch,004ch,0020h,0417h,0430h,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
|
||||
UnloadMsg dw 0044h,004ch,004ch,0020h,0432h,044bh,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
|
||||
SHAMsg dw 0053h,0048h,0041h,0032h,0035h,0036h,0020h,0417h,0430h,043fh,0443h,0449h,0435h,043dh,0430h,0021h,0000h ;"SHA256 Запущена!"
|
||||
DllAtata dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,043bh,0020h,0044h,004ch,004ch,005fh,0054h,0048h,0052h,0045h,0041h,0044h,005fh,0041h,0054h,0054h,0041h,0043h,0048h,0000h
|
||||
DllDetata dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,043bh,0020h,0044h,004ch,004ch,005fh,0050h,0052h,004fh,0043h,0045h,0053h,0053h,005fh,0044h,0045h,0054h,0041h,0043h,0048h,0000h
|
||||
AppName: ;DLL Skeleton
|
||||
dw 0044h,004ch,004ch,0020h,0053h,006bh,0065h,006ch,0065h,0074h,006fh,006eh,0000h
|
||||
HelloMsg: ;Вызвана функция TestHello
|
||||
dw 0412h,044bh,0437h,0432h,0430h,043dh,0430h,0020h,0444h,0443h,043dh,043ah,0446h,0438h,044fh,0020h,0054h,0065h,0073h,0074h,0048h,0065h,006ch,006ch,006fh,0000h
|
||||
LoadMsg: ;DLL Загружена
|
||||
dw 0044h,004ch,004ch,0020h,0417h,0430h,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
|
||||
UnloadMsg: ;DLL выгружена
|
||||
dw 0044h,004ch,004ch,0020h,0432h,044bh,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
|
||||
SHAMsg: ;"SHA256 Запущена!"
|
||||
dw 0053h,0048h,0041h,0032h,0035h,0036h,0020h,0417h,0430h,043fh,0443h,0449h,0435h,043dh,0430h,0021h,0000h
|
||||
|
||||
DllAtata: ;Неожиданно прилетел DLL_THREAD_ATTACH
|
||||
dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,043bh,0020h,0044h,004ch,004ch,005fh,0054h,0048h,0052h,0045h,0041h,0044h,005fh,0041h,0054h,0054h,0041h,0043h,0048h,0000h
|
||||
prime2nums: ;Простые числа от 2 до 311
|
||||
dw 02h,03h,05h,07h,0Bh,0Dh,11h,13h,17h,1Dh,1Fh,25h,29h,2Bh,2Fh,35h,3Bh,3Dh,43h,47h,49h,4Fh,53h,59h
|
||||
dw 61h,65h,67h,6Bh,6Dh,71h,7Fh,83h,89h,8Bh,95h,97h,9Dh,0A3h,0A7h,0ADh,0B3h,0B5h,0BFh,0C1h,0C5h,0C7h,0D3h,0DFh
|
||||
dw 0E3h,0E5h,0E9h,0EFh,0F1h,0FBh,101h,107h,10Dh,10Fh,115h,119h,11Bh,125h,133h,137h
|
||||
|
||||
DllDetata: ;Неожиданно прилетел DLL_PROCESS_DETACH
|
||||
dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,\
|
||||
043bh,0020h,0044h,004ch,004ch,005fh,0050h,0052h,004fh,0043h,0045h,0053h,0053h,005fh,0044h,0045h,0054h,0041h,0043h,0048h,0000h
|
||||
|
||||
prime_nums: ; 8 байт с простыми числами от 2 до 19
|
||||
db 0 dup (8)
|
||||
align 16
|
||||
my3sqrt REAL8 0.3333333333333333333333333333
|
||||
;xmminst dq 12232434,13342342342
|
||||
xmmhash xmmword 0 dup (4); 4 Байта в которых хранится хэш
|
||||
k_konst dd 0 dup (64) ;64 32-битных значения инициированных первыми 32 битами дробной части кубических корней от 2 о 311
|
||||
myXMMSAVE xmmword 0 dup (10) ;глобальная переменная для сохранения/восстановления регистров XMM6-XMM15 (неизменяемые)
|
||||
myRnSAVE dq 0 dup (4) ;глобальная переменная для сохранения/восстановления регистров R12-R15 (неизменяемые)
|
||||
|
||||
.code
|
||||
DllMain proc hInstDLL:QWORD, reason:QWORD, unused:QWORD
|
||||
;push rbp
|
||||
;mov rbp,rsp
|
||||
sub rsp,28h
|
||||
.if edx==DLL_PROCESS_ATTACH
|
||||
lea rdx,LoadMsg
|
||||
.elseif edx==DLL_PROCESS_DETACH
|
||||
lea rdx,UnloadMsg
|
||||
.elseif edx==DLL_THREAD_ATTACH
|
||||
;lea rdx,DllAtata
|
||||
add rsp,28h
|
||||
xor rax,rax
|
||||
ret
|
||||
.elseif edx==DLL_THREAD_DETACH
|
||||
;lea rdx,DllDetata
|
||||
add rsp,28h
|
||||
xor rax,rax
|
||||
ret
|
||||
.if edx==DLL_PROCESS_ATTACH ;Обрабатываю событие вызова DLL
|
||||
call _isAvxSupported
|
||||
pshufd xmm0,xmm0,10010011b ;Перераспределяет 32-битные qword'ы в xmm согласно битовой маске: 2 бита, числа от 0-3 сообщают
|
||||
pshufd xmm0,xmm0,10010011b ;слева направо новое расположение qword'ов в регистре XMM. Например: 3-2-1-0 -> 2-1-0-3(10010011b)
|
||||
pshufd xmm0,xmm0,10010011b
|
||||
pshufd xmm0,xmm0,10010011b
|
||||
mov eax,001020304h ;вычисляю Σ0
|
||||
xor rcx,rcx
|
||||
ror eax,2
|
||||
xor ecx,eax
|
||||
ror eax,11
|
||||
xor ecx,eax
|
||||
ror eax,9
|
||||
xor ecx,eax
|
||||
;вычисляю ключ
|
||||
mov eax,001020304h
|
||||
xor eax,ecx
|
||||
mov edx,eax ; в EDX - ключ
|
||||
mov eax,001020304h
|
||||
xor eax,edx
|
||||
;смотрю, подходит ли он для других чисел
|
||||
mov eax,005040304h ;вычисляю Σ0
|
||||
xor rcx,rcx
|
||||
ror eax,2
|
||||
xor ecx,eax
|
||||
ror eax,11
|
||||
xor ecx,eax
|
||||
ror eax,9
|
||||
xor ecx,eax
|
||||
;Подставляю ключ из первого примера
|
||||
mov eax,005040304h
|
||||
xor eax,edx
|
||||
lea rdx,LoadMsg ;Указатель на сообщение "DLL загружена"
|
||||
.elseif edx==DLL_PROCESS_DETACH ;Обрабатываю событие закрытия DLL
|
||||
lea rdx,UnloadMsg ;Указатель на сообщение "DLL выгружена"
|
||||
.elseif edx==DLL_THREAD_ATTACH ;Обрабатываю событие создания треда в вызывающем процессе
|
||||
;(ох и попило крови это событие: не обрабатывал, а по-умолчанию падало на другой обработчик)
|
||||
;lea rdx,DllAtata ;Указатель на сообщение "неожиданно прилетел DLL_THREAD_ATTACH"
|
||||
add rsp,28h ;восстанавливаю вершину стека
|
||||
xor rax,rax ;возвращаю ноль
|
||||
ret ;Выхожу
|
||||
.elseif edx==DLL_THREAD_DETACH ;Обрабатываю событие закрытия треда в вызывающем процессе
|
||||
;lea rdx,DllDetata ;Указатель на сообщение "Неожиданно прилетел DLL_PROCESS_DETACH"
|
||||
add rsp,28h ;восстанавливаю вершину стека
|
||||
xor rax,rax ;возвращаю ноль
|
||||
ret ;Выхожу
|
||||
.endif
|
||||
mov r9d,MB_OK
|
||||
mov r9d,MB_OK ;
|
||||
jmp exit
|
||||
DllMain Endp
|
||||
TestHello proc
|
||||
@@ -49,16 +106,119 @@ exit:: lea r8,AppName
|
||||
mov rax,TRUE
|
||||
ret
|
||||
TestHello endp
|
||||
Sha256 proc h_line:QWORD, h_size:QWORD
|
||||
sub rsp,28h
|
||||
;Основа
|
||||
lea rdx,SHAMsg
|
||||
mov r9d,MB_OK + MB_ICONERROR
|
||||
lea r8,SHAMsg
|
||||
xor ecx,ecx
|
||||
call MessageBoxW
|
||||
add rsp,28h
|
||||
;Sha256 - Функция, принимающая в качестве параметра 1-Адрес хешируемого объекта;2-его полный размер; 3-Размер отрезка; 4-последний ли он?. Возвращаемое значение: NULL в случае успеха
|
||||
Sha256 proc __fastcall
|
||||
enter 128,0
|
||||
|
||||
leave
|
||||
xor rax,rax
|
||||
ret
|
||||
Sha256 Endp
|
||||
;Инициализация хэш функции, ввод исходных значений
|
||||
Sha256Init proc __fastcall
|
||||
LOCAL myInt64:QWORD ;Число для преобразования
|
||||
LOCAL squareRoot:QWORD ;Корень
|
||||
LOCAL delitel:QWORD ;делитель (равен 1 для извлечения дробной части числа)
|
||||
LOCAL mnoz:QWORD;множитель для выведение целого числа
|
||||
LOCAL myxmmword:XMMWORD
|
||||
enter 8*8,0
|
||||
lea rdx,prime_nums ;в RDX массив простых чисел
|
||||
lea r8,xmmhash ;в R8 - адрес инициализированного хэша (его начальных значений)
|
||||
mov rcx,8 ;в RCX количество повторений цикла. Для процессора нет разницы, обращаться к DL или к RDX, поэтому снижаю расходы приводя всё к единому размеру
|
||||
mov rax,1373893702338282242
|
||||
mov QWORD PTR [rdx],rax ; инициализирую простые числа от 2 до 19
|
||||
loop1:
|
||||
finit
|
||||
mov al, BYTE PTR [rdx] ;беру текущее простое число
|
||||
and rax,255
|
||||
mov myInt64,rax
|
||||
mov delitel,1 ;делитель 1 нужен для отсечения целой части, при делениии на 1 по модулю
|
||||
mov rax,4294967296 ;множитель 2^32, нужен...\
|
||||
mov QWORD PTR mnoz,rax ;...для сдвига дробной части на 32 бита
|
||||
fild QWORD PTR mnoz ; сохраняю всё в стек FPU
|
||||
fild QWORD PTR delitel
|
||||
fild QWORD PTR myInt64
|
||||
fsqrt ;извлекаю корень
|
||||
fprem ;делю на 1 по модулю
|
||||
fmul ST,ST(2) ;сдвигаю на 32
|
||||
fisttp qword ptr squareRoot ;сохраняю для проверки
|
||||
mov eax,dword ptr squareRoot ;сохраняю результат в хеше
|
||||
mov dword ptr [r8],eax
|
||||
add r8,4;сдвигаю указатель на хэш
|
||||
inc rdx ;сдвигаю указатель на простое число
|
||||
dec rcx
|
||||
jnz loop1 ;цикл
|
||||
; Далее, инициализирую константы (k) кубическим корнем ряда первых 64 простых числел от 2 до 311
|
||||
lea rdx,prime2nums ;в RDX адресс массива простых числел
|
||||
forxmm0: ;Заполняю регистр XMM0 значениями 4-х корней
|
||||
mov r8,64 ;счётчик цикла
|
||||
lea r9,k_konst ;указатель на буфер k_konst
|
||||
loopxmm0:
|
||||
mov cx, word ptr [rdx]; беру текущее простое число
|
||||
and rcx,65535 ;обнуляю остальные биты
|
||||
call z3sqrt ;вызываю процедуру рассчёта дробной части от кубического корня от числа в rcx
|
||||
mov dword ptr [r9],eax ;сохраняю результат в буфер
|
||||
add rdx,2 ;сдвигаю указатель на простое число
|
||||
add r9,4 ;сдвигаю указатель на буфер k_konst
|
||||
dec r8 ;уменьшаю счётчик
|
||||
jnz loopxmm0 ;цикл
|
||||
leave
|
||||
ret
|
||||
Sha256Init Endp
|
||||
_isAvxSupported: ; extern "C" int isAvxSupported()
|
||||
xor eax, eax
|
||||
cpuid
|
||||
cmp eax, 1 ; Поддерживает ли CPUID параметр eax = 1?
|
||||
jb not_supported
|
||||
mov eax, 1
|
||||
cpuid
|
||||
and ecx, 018000000h ; Проверяем, что установлены биты 27 (ОС использует XSAVE/XRSTOR)
|
||||
cmp ecx, 018000000h ; и 28 (поддержка AVX процессором)
|
||||
jne not_supported
|
||||
xor ecx, ecx ; Номер регистра XFEATURE_ENABLED_MASK/XCR0 есть 0
|
||||
xgetbv ; Регистр XFEATURE_ENABLED_MASK теперь в edx:eax
|
||||
and eax, 110b
|
||||
cmp eax, 110b ; Убеждаемся, что ОС сохраняет AVX регистры при переключении контекста
|
||||
jne not_supported
|
||||
mov eax, 1
|
||||
ret
|
||||
not_supported:
|
||||
xor eax, eax
|
||||
ret
|
||||
z3sqrt proc __fastcall ;вынес вычисление кубического корня в процедуру. На входе, в rcx - простое число, на выходе, в rax 32 бита остатка.
|
||||
LOCAL myInt64:QWORD ;локальная переменная для хранения простого числа
|
||||
LOCAL delitel:QWORD ;делитель (равен 1 для извлечения дробной части числа)
|
||||
LOCAL mnoz:QWORD;множитель для выведение целого числа
|
||||
LOCAL result:QWORD ;результат
|
||||
LOCAL regCR:word ;ячейка для сохренения регистра CR (FPU)
|
||||
enter 5*8,0
|
||||
mov myInt64,rcx ;сохраняю в переменную
|
||||
mov delitel,1 ;единица для деления по модулю
|
||||
mov rax,4294967296 ;множитель 2^32, нужен...\
|
||||
mov QWORD PTR mnoz,rax ;...для сдвига дробной части на 32 бита
|
||||
finit
|
||||
fstcw regCR ;сохраняю регистр CR (FPU), для изменения значения бита округления
|
||||
or word ptr regCR,3072 ;включаю 10 и 11 биты, сообщающие, что нужно округлять до нуля (в сторону нуля)
|
||||
fldcw regCR ;записываю изменённые значения в регистра CR
|
||||
fild QWORD PTR mnoz ; сохраняю всё в стек FPU
|
||||
fild QWORD PTR delitel
|
||||
fld QWORD PTR my3sqrt ;загружаю 1/3
|
||||
fild QWORD PTR myInt64 ;текущее простое число
|
||||
FYL2X ;получаю LN(x)
|
||||
fld ST(0) ;Создаем еще одну копию LN(x)
|
||||
frndint ;Округляем
|
||||
fsubr st(0),st(1) ;ST(1)=z, ST(0)=z-trunc(z)
|
||||
f2xm1 ;ST(1)=z, ST(0)=2**(z-trunc(z))-1
|
||||
fld1
|
||||
faddp ;ST(1)=z, ST(0)=2**(z-trunc(z))
|
||||
fscale ;ST(1)=z, ST(0)=(2**trunc(z))*(2**(z-trunc(z)))=2**t
|
||||
fxch st(1)
|
||||
fstp st ;Результат остается на вершине стека ST(0)
|
||||
fprem ;делю на 1 по модулю
|
||||
fmul ST,ST(2) ;сдвигаю на 32
|
||||
fisttp qword ptr result ;сохраняю результат
|
||||
mov rax,result
|
||||
leave
|
||||
ret
|
||||
z3sqrt endp
|
||||
end
|
||||
+2
-1
@@ -1,4 +1,5 @@
|
||||
LIBRARY sha-256
|
||||
EXPORTS DllMain
|
||||
EXPORTS TestHello
|
||||
EXPORTS Sha256
|
||||
EXPORTS Sha256
|
||||
EXPORTS Sha256Init
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -1 +1,2 @@
|
||||
После подключения DLL вызывающая прогамма ловит исключение через 20-30 секунд (в дебагере - сразу). Похоже, глюк в адресации. Проверить возвращаемые значения.
|
||||
Проблема оказалась в том, что в wndproc переменные я хранил локально, что давало исключене после вызова DLL
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
RAX 64(double) 00000000 00000000 8 байт
|
||||
RCX 64(double) 00000000 00000000 8 байт
|
||||
RDX 64(double) 00000000 00000000 8 байт
|
||||
R8 64(double) 00000000 00000000 8 байт - A,B (Занят только во время цикла)
|
||||
R9 64(double) 00000000 00000000 8 байт - C,D (Занят только во время цикла)
|
||||
R10 64(double) 00000000 00000000 8 байт - E,F (Занят только во время цикла)
|
||||
R11 64(double) 00000000 00000000 8 байт - G,H (Занят только во время цикла)
|
||||
R12 64(double) 00000000 00000000 8 байт - H1,H2
|
||||
R13 64(double) 00000000 00000000 8 байт - H3,H4
|
||||
R14 64(double) 00000000 00000000 8 байт - H5,H6
|
||||
R15 64(double) 00000000 00000000 8 байт - H7,H8
|
||||
XMM0 128 00000000 00000000 00000000 00000000 16 байт - W1,W2,W3,W4
|
||||
XMM1 128 00000000 00000000 00000000 00000000 16 байт - W5,W6,W7,W8
|
||||
XMM2 128 00000000 00000000 00000000 00000000 16 байт - W9,W10,W11,W12
|
||||
XMM3 128 00000000 00000000 00000000 00000000 16 байт - W13,W14,W15,W16
|
||||
XMM4 128 00000000 00000000 00000000 00000000 16 байт - W17,W18,W19,W20
|
||||
XMM5 128 00000000 00000000 00000000 00000000 16 байт - W21,W22,W23,W24
|
||||
XMM6 128 00000000 00000000 00000000 00000000 16 байт - W25,W26,W27,W28
|
||||
XMM7 128 00000000 00000000 00000000 00000000 16 байт - W29,W30,W31,W32
|
||||
XMM8 128 00000000 00000000 00000000 00000000 16 байт - W33,W34,W35,W36
|
||||
XMM9 128 00000000 00000000 00000000 00000000 16 байт - W37,W38,W39,W40
|
||||
XMM10 128 00000000 00000000 00000000 00000000 16 байт- W41,W24,W43,W44
|
||||
XMM11 128 00000000 00000000 00000000 00000000 16 байт- W45,W46,W47,W48
|
||||
XMM12 128 00000000 00000000 00000000 00000000 16 байт- W49,W50,W51,W52
|
||||
XMM13 128 00000000 00000000 00000000 00000000 16 байт- W53,W54,W55,W56
|
||||
XMM14 128 00000000 00000000 00000000 00000000 16 байт- W57,W58,W59,W60
|
||||
XMM15 128 00000000 00000000 00000000 00000000 16 байт- W61,W62,W63,W64
|
||||
Reference in New Issue
Block a user