lign="justify">//Абсолютна адресаціяbyte ptr ($ 777h)
3. Лістинг програми для порівняння архітектур i686 та amd64
Лістинг 9. Найпростіша програма шифрування тексту для архітектури amd64..text
. globl crypt
. type crypt,function:
. LFB0:% rbp% rsp,% rbp $ 32,% rsp% rdi, - 24 (% rbp)% rsi, - 32 (% rbp) $ 0, - 16 (% rbp) $ 0,- 12 (% rbp) - 24 (% rbp),% rax% rax,% rdi strlen% rax,% rdi malloc% rax, - 8 (% rbp) .L2
. L3: - 16 (% rbp),% eax% eax,% rdx - 8 (% rbp),% rax% rax,% rdx - 16 (% rbp),% eax% eax ,% rcx - 24 (% rbp),% rax% rcx,% rax (% rax),% ecx - 12 (% rbp),% eax% eax,% rsi - 32 (% rbp),% rax% rsi, % rax (% rax),% eax% ecx,% eax% al, (% rdx) $ 1, - 16 (% rbp) $ 1, - 12 (% rbp) - 12 (% rbp),% eax% eax,% rdx - 32 (% rbp),% rax% rdx,% rax (% rax),% eax% al,% al .L2 $ 0, - 12 (% rbp)
. L2: - 16 (% rbp),% eax% eax,% rdx - 24 (% rbp),% rax% rdx,% rax (% rax),% eax% al,% al .L3 - 8 (% rbp),% rax
. LFE0:
. size crypt,.-crypt
. section .rodata ??p>
. LC0:
. string Hello World!
. LC1:
. string My_key111
. LC2:
. string --------------
. text
. globl main
. type main,function:
. LFB1:% rbp% rsp,% rbp $ 32,% rsp% edi, - 20 (% rbp)% rsi, - 32 (% rbp) $ .LC0, - 16 (% rbp) $ .LC1, - 8 (% rbp) - 16 (% rbp),% rax% rax,% rdi puts $ .LC2,% edi puts - 8 (% rbp),% rdx - 16 (% rbp),% rax % rdx,% rsi% rax,% rdi crypt% rax, - 16 (% rbp) - 16 (% rbp),% rax% rax,% rdi puts - 8 (% rbp),% rdx - 16 (% rbp) ,% rax% rdx,% rsi% rax,% rdi crypt% rax, - 16 (% rbp) $ .LC2,% edi puts - 16 (% rbp),% rax% rax,% rdi puts $ 0,% eax
. LFE1:
. size main,.-main
Лістинг 10. Найпростіша програма шифрування тексту для архітектури i686..text
. globl crypt
. type crypt,function:
. LFB0:% ebp
movl% esp,% ebp% ebx $ 36,% esp $ 0, - 12 (% ebp) $ 0, - 16 (% ebp) 8 (% ebp),% eax% eax, (% esp ) strlen% eax, (% esp) malloc% eax, - 20 (% ebp) .L2
. L3: - 12 (% ebp),% edx - 20 (% ebp),% eax% eax,% edx - 12 (% ebp),% ecx 8 (% ebp),% eax% ecx,% eax (% eax),% ecx - 16 (% ebp),% ebx 12 (% ebp),% eax% ebx,% eax (% eax),% eax% ecx,% eax% al, (% edx) $ 1, - 12 (% ebp) $ 1, - 16 (% ebp) - 16 (% ebp),% edx 12 (% ebp),% eax% edx,% eax (% eax),% eax% al,% al .L2 $ 0, - 16 (% ebp)
. L2: - 12 (% ebp),% edx 8 (% ebp),% eax% edx,% eax (% eax),% eax% al,% al .L3 - 20 ( % ebp),% eax $ 36,% esp% ebx% ebp
. LFE0:
. size crypt,.-crypt
. section .rodata ??p>
. LC0:
. string Hello World!
. LC1:
. string My_key111
. LC2:
. string --------------
. text
. globl main
. type main,function:
. LFB1:% ebp% esp,% ebp $ - 16,% esp $ 32,% esp $ .LC0, 28 (% esp) $ .LC1, 24 (% esp) 28 (% esp ),% eax% eax, (% esp) puts $ .LC2, (% esp) puts 24 (% esp),% eax% eax, 4 (% esp) 28 (% esp),% eax% eax, (% esp) crypt% eax, 28 (% esp) 28 (% esp),% eax% eax, (% esp) puts 24 (% esp),% eax% eax, 4 (% esp) 28 (% esp),% eax% eax, (% esp) crypt% eax, 28 (% esp) $ .LC2, (% esp) puts 28 (% esp),% eax% eax, (% esp) puts $ 0,% eax
. LFE1:
. size main,.-main
4. Приклад роботи програми
Малюнок 1. Приклад роботи найпростішої програми шифрування тексту на архітектурі amd64.
Малюнок 2. Приклад роботи найпростішої програми шифрування тексту на архітектурі i686.
5. Порівняння програм
На такому простому прикладі складно помітити приріст продуктивності «на око», але приклад з шифруванням та дешифруванням даних був вибраний невипадково.
У більшості алгоритмів шифрування і дешифрування даних, а також при складанні хеш-сум потрібне використання 64-х або більше розрядних даних. Аналізуючи вихідний код в прикладах можна помітити, що використання 64-х розрядної архітектури дозволяє за один такт передати більшу кількість даних, а отже збільшити швидкість роботи ал...