📄 link.asm
字号:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
;Written by 郭肇禄
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; string.asm
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none
LINKNOD STRUCT
Data DWORD ?
Next DWORD ?
LINKNOD ENDS
.data
hHeap dd 0
pL LINKNOD <0>
hFile dd 0
dWN dd 0
FilName db 'tt.txt', 0
Lstr db 804800 dup(?)
.code
;************************************************
_CreateHeap proc uses ecx edx
invoke HeapCreate, HEAP_NO_SERIALIZE, 01000h, 0
mov hHeap, eax
ret
_CreateHeap endp
;**********************************************
_NewNod proc uses ecx edx NodSize
invoke HeapAlloc, hHeap, 0 , NodSize
ret
_NewNod endp
;***********************************************
_AdjustNod proc uses edi esi edx pNod
local @x:DWORD
local @c:byte
mov edx, 0
mov @x, 0Ah
mov edi, pNod
_NextList:
mov esi, edi
mov eax, [esi]
add eax, edx
mov [esi], eax
cdq
idiv @x
cmp eax, 0
jnz _DAYI10
mov edx, 0
jmp _NoChangNOd
_DAYI10:
mov [esi], edx
mov edx, eax
_NoChangNOd:
mov edi, [esi+4]
cmp edi, 0
jnz _NextList
.if edx != 0
invoke _NewNod, sizeof LINKNOD
mov [esi + 4], eax
mov [eax], edx
mov DWORD ptr [eax + 4], 0
.endif
cmp edx, 10
mov edi, eax
mov edx, 0
jge _NextList
_EndList:
ret
_AdjustNod endp
_MulNod proc uses esi edi pNod, data
mov edi, pNod
_NextList:
mov esi, edi
mov eax, [esi]
imul eax, data
mov [esi], eax
mov edi, [esi + 4]
cmp edi,0
jnz _NextList
ret
_MulNod endp
;************************************************
_InitMul proc Num
local @st:DWORD
local @str2[5]:byte
mov byte ptr @str2, 13
mov byte ptr @str2+1, 10
mov byte ptr @str2+2, 0
invoke _CreateHeap
mov pL.Data, 1
mov pL.Next, 0
mov ecx, Num
mov ebx, 1
invoke GetTickCount
mov @st, eax
_NextNum:
cmp ecx, 0
jz _EndMul
invoke _MulNod, addr pL, ebx
invoke _AdjustNod, addr pL
inc ebx
dec ecx
jmp _NextNum
_EndMul:
lea edi, pL
lea esi, [Lstr+804800]
mov ebx, esi
_NextChar:
mov eax, [edi]
add eax, '0'
mov byte ptr [esi], al
dec esi
mov edi, [edi + 4]
cmp edi,0
jnz _NextChar
sub ebx, esi
inc esi
invoke CreateFile, addr FilName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS,\
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH, NULL
mov hFile, eax
invoke WriteFile, hFile, esi, ebx, addr dWN, NULL
invoke GetTickCount
sub eax, @st
mov @st, eax
invoke WriteFile, hFile, addr @str2, 2, addr dWN, NULL
invoke WriteFile, hFile, addr @st, sizeof DWORD , addr dWN, NULL
invoke CloseHandle, hFile
invoke MessageBox, NULL, addr @str2, addr @str2, 0
ret
_InitMul endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -