Assembly 汇编函数令人困惑
这是一个汇编函数。据我所知,这是一个函数,通过创建循环来计算Assembly 汇编函数令人困惑,assembly,nasm,masm,masm32,Assembly,Nasm,Masm,Masm32,这是一个汇编函数。据我所知,这是一个函数,通过创建循环来计算eax中32位值的校验和 当lodsb写入整个32位值时,我感到困惑。据我所知,循环尝试在读取32位值后加载一个字节,在用于终止目的的test指令之前将零加载到eax。如果我错了,请告诉我 Checksum_Calc: lodsb test eax, eax ;avoids null byte in cmp eax, 0 jz CheckFunction ad
eax
中32位值的校验和
当lodsb
写入整个32位值时,我感到困惑。据我所知,循环尝试在读取32位值后加载一个字节,在用于终止目的的test
指令之前将零加载到eax
。如果我错了,请告诉我
Checksum_Calc:
lodsb
test eax, eax ;avoids null byte in cmp eax, 0
jz CheckFunction
add edx, eax
xor edx, eax
inc edx
jmp Checksum_Calc
Lodsb正在将数字放入
AL
寄存器(仅低8位)
这条线
Test Eax, Eax ;Avoid the null byte in Cmp Eax,0
…正在使用所有32位,将代码片段转换为C伪代码如下所示
eax=0;
/*一些看不见的代码*/
while(true)
{
al=mem[esi];/*这只修改覆盖在32位eax“结构”上的较低8位*/
/*eax=(eax&0xFFFFFF00)| al*/
esi=esi+1;
如果(eax==0)
{
转到检查功能;
}
edx=edx+eax;
edx=edx^eax;
edx=edx+1;
}
一般来说,在研究一些遗留源代码时,将代码转换成另一种更简单的语言,甚至转换成图形语言(如“Rapid Quality Systems的代码火箭设计器”的作者发明的语言,请参见)是一种方法?这应该是
Loadsb
吗?或者,您可以在Lodsb
指令之后插入Movzx Eax,Al
指令。查看所有位可能没问题(例如,如果以前的代码确保Eax的上24位是清晰的)由于所示代码中没有任何其他内容会改变上面的24位。User3187056在他对情况的描述中包含了这句话,“……我认为当loopsb读取所有32位值时……”
恐怕Brendan是正确的<代码>测试eax,eax,测试al,al
,这无关紧要。所有功能需要检查的是al
中是否存储了零。这正是代码所做的。原始海报只是要求确认他对所呈现功能的理解。