下你所需,载你所想!
汇集开发技术源码资料

自己写的汇编源码,整数型数组是否存在

:1.114KB :1 :2021-11-19 18:23:43

部分简介

push esi//压入原始数据,以备后面还原
push edi//压入原始数据,以备后面还原
push edx//压入原始数据,以备后面还原
mov esi,dword [ebp+0x08]//取得变量数组指针
mov esi, dword [esi]//从变量指针里获取出数据地址
add esi, 0x04//地址+4获取成员数
cmp dword [esi], 0x00//判断成员数是否等于0
je Label1//等于0就跳转到返回代码
mov edi, dword [ebp+0x0C]//edi存的是预寻找数值
mov ecx, dword [esi]//ecx存的是数组成员数,即循环次数
push ecx //把成员数压入栈中
cmp dword [ebp+0x10], 0x00//判断跳过索引是否小于等于0
jle Label4//如果跳过索引小于等于0则直接跳到循环
sub ecx,dword [ebp+0x10]//循环次数减去跳过索引
mov eax,0x04//准备乘法左侧
mov ebx,dword [ebp+0x10]//准备乘法右侧
mul ebx//执行乘法,结果存在eax里
add esi,eax//数组地址指针加上跳过的索引位置
Label4://循环次数开始
add esi, 0x04//数组指针+4到下一个成员位置
cmp dword [esi], edi//判断成员数值是否等于预寻找数值
jne Label3//如果不等于就跳到循环尾,等于就继续执行索引处理然后返回
pop eax//取出压入的成员数
sub eax, ecx//成员数减掉剩余循环数
add eax, 0x01//加1得到正确的索引
jmp Label2//直接跳出循环,跳到后面的返回代码
Label3://循环尾
loop Label4//跳到指定地方继续循环
pop eax//进到这里是循环次数用光了,取出之前压入的栈数据,已经是无用数据了
Label1:
xor eax, eax//eax清0
Label2:
pop edx//取出之前压入的原本数据
pop edi//取出之前压入的原本数据
pop esi//取出之前压入的原本数
leave
retn 0x0010//3个参数+1个可空,4*4=16=10h

自己写的汇编源码,整数型数组是否存在

热门推荐

相关文章