娱乐娱乐,这是纯asm版本,很基础的东西。
几个函数的实现memset
代码:
memset proc src:DWORD,char:BYTE,sze:DWORD push ebx push ecx push edx mov ecx,[ebp+16] mov bl,[ebp+12] mov edx,[ebp+8] @loop: mov [edx],bl inc edx loop @loop pop edx pop ecx pop ebx ret memset endp
代码:
memcpy proc dst:BYTE,src:BYTE push eax push ebx push edx push esi mov eax,[ebp+8] mov ebx,[ebp+12] mov esi,ebx @Zero: mov dl,[esi] cmp dl,0h je @loop xor dl,dl mov [esi],dl inc esi jmp @Zero @loop: mov dl,[ebx] cmp dl,30h jl Exit cmp dl,39h jg Exit mov [eax],dl inc ebx inc eax jmp @loop Exit: pop esi pop edx pop ebx pop eax ret memcpy endp
代码:
memlen proc src:DWORD push ecx push ebx xor ecx,ecx mov eax,[ebp+8] @loop: mov bl,[eax] cmp bl,13 je Exit inc eax inc ecx jmp @loop Exit: mov eax,ecx pop ebx pop ecx ret memlen endp
代码:
adding proc dst:DWORD,src:DWORD sub esp,272 push 272 push 0 push esp call memset mov eax,[ebp+8] push eax call memlen dec eax mov [esp],eax mov eax,[ebp+12] push eax call memlen dec eax mov [esp+4],eax xor edx,edx mov edi,[ebp+8] mov esi,[ebp+12] @l1: xor ebx,ebx cmp [esp],ebx jl @l2 cmp [esp+4],ebx jl @l2 mov eax,[esp] mov ecx,[esp+4] mov bl,[edi+eax] add bl,[esi+ecx] sub bl,60h mov [esp+8+edx],ebx add edx,4 mov eax,[esp] dec eax mov [esp],eax mov eax,[esp+4] dec eax mov [esp+4],eax jmp @l1 @l2: mov eax,[esp] jl @l3 mov ebx,[edi+eax] sub ebx,30h mov [esp+8+edx],ebx dec eax mov [esp],eax jmp @l2 @l3: mov eax,[esp+4] jl @tp mov ebx,[esi+eax] sub ebx,30h mov [esp+8+edx],ebx dec eax mov [esp+4],eax jmp @l3 @tp: xor ebx,ebx @l4: cmp ebx,edx jge @l5 mov eax,[esp+8+ebx] push edx cdq push ebx mov ebx,10 idiv ebx pop ebx pop edx add [esp+8+ebx+4],eax mov eax,[esp+8+ebx] push edx cdq push ebx mov ebx,10 idiv ebx pop ebx mov [esp+8+ebx+4],edx pop edx add ebx,4 jmp @l4 @l5: mov eax,[esp+8+edx] test eax,eax jne @tp1 sub edx,4 @tp1: xor ebx,ebx @l6: test edx,edx jl @Exit add [esp+8+edx],30h mov eax,[esp+8+edx] mov [edi+ebx],al add ebx,1 sub edx,4 jmp @l6 @Exit: add esp,272 ret adding endp
代码:
.386 .model flat, stdcall option casemap :none include windows.inc include user32.inc include kernel32.inc include masm32.inc include gdi32.inc includelib gdi32.lib includelib user32.lib includelib kernel32.lib includelib masm32.lib include macro.asm .data lpMsg db "请输入大数:",0 lpMsg1 db "大数的结果:",0 .data? buffer db MAX_PATH dup(?) .CODE START: invoke locate,2,2 ;设定输出文本的坐标 invoke StdOut,offset lpMsg invoke StdIn,addr buffer,sizeof buffer push offset buffer push offset buffer call adding invoke locate,2,4 invOke StdOut,offset lpMsg1 invoke StdOut,offset buffer invoke StdIn,addr buffer,sizeof buffer invoke ExitProcess,0