📄 gost_asm.asm
字号:
;*;* $Id: gost_asm.asm,v 1.1.1.1 2002/03/28 00:03:01 andrew_belov Exp $;* ---------------------------------------------------------------------------;* Optimized assembly language routines for 386+ are located in this module.;*INCLUDE ASM_INCL.INCpublic gost_loop_32.386C.CODE;*;* Imported variables;*extern pattern:byte;*;* General GOST procedure;*gost_term_32 procdata_acc = dword ptr -4g_data = dword ptr 4 push bp mov bp, sp sub sp, 4 push si lea si, [bp+g_data] mov al, [si] mov ah, 0 mov bx, ax mov al, pattern[bx+300h] mov byte ptr [bp+data_acc], al mov al, byte ptr [bp+g_data+1] mov ah, 0 mov bx, ax mov al, pattern[bx+200h] mov byte ptr [bp+data_acc+1], al mov al, byte ptr [bp+g_data+2] mov ah, 0 mov bx, ax mov al, pattern[bx+100h] mov byte ptr [bp+data_acc+2], al mov al, byte ptr [bp+g_data+3] mov ah, 0 mov bx, ax mov al, pattern[bx] mov byte ptr [bp+data_acc+3], al mov eax, [bp+data_acc] shl eax, 11 mov edx, [bp+data_acc] shr edx, 21 or eax, edx shld edx, eax, 16 pop si leave retgost_term_32 endp;*;* Encoding/decoding loop;*gost_loop_32 procmod1 = dword ptr -8mod2 = dword ptr -4src = word ptr 4dest = word ptr 6key = word ptr 8 push bp mov bp, sp sub sp, 8 push si push di mov di, [bp+src] mov si, [bp+key] mov eax, [di] mov [bp+mod2], eax mov eax, [di+4] mov [bp+mod1], eax xor di, diloop_start: mov eax, [bp+mod2] add eax, [si] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+4] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+8] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+12] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+16] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+20] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+24] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+28] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax inc di cmp di, 3 jge loop_end jmp loop_startloop_end: mov eax, [bp+mod2] add eax, [si+28] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+24] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+20] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+16] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+12] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si+8] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov eax, [bp+mod2] add eax, [si+4] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod1], eax mov eax, [bp+mod1] add eax, [si] push eax call gost_term_32 shl eax, 16 shrd eax, edx, 16 add sp, 4 xor [bp+mod2], eax mov bx, [bp+dest] mov eax, [bp+mod1] mov [bx], eax mov eax, [bp+mod2] mov [bx+4], eax pop di pop si leave retgost_loop_32 endp end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -