我想为Windows机器提供汇编程序(assembly?)中的字节码,以添加两个32位长,并丢弃进位位。我意识到“Windows机器”部分有点模糊,但我假设ADD
的字节在所有现代英特尔指令集中几乎相同。
我只是想稍微滥用一下VB,让一些事情变得更快。因此,作为在VB中运行直接汇编的示例,十六进制字符串“8A4C240833C0F6C1E075068B442404D3E0C20800”
是SHL
的汇编代码,可以是“注入”到VB6程序中,以进行需要两个Long参数的快速SHL
操作(我们在这里忽略了VB6中的32位Long是有符号的,只是假装它们是无符号的)。
同样,代表汇编指令的十六进制字节字符串是什么?这些汇编指令将执行相同的操作来返回两个32位无符号整数的和?
根据作者的说法,上述SHL
的十六进制代码为:
mov eax, [esp+4]
mov cl, [esp+8]
shl eax, cl
ret 8
我将这些字节吐到一个文件中,并尝试使用旧的调试实用程序在windows命令提示符下对其进行解压缩,但我发现它不适用于新的指令集,因为当我尝试组装某些东西时,它不喜欢EAX
,但它对AX
很满意。
我从源代码中的注释中知道SHL EAX,CL
是D3E0
,但我没有任何参考来知道ADD EAX,CL
指令的字节是什么,或者我会尝试一下。(尽管我现在知道操作数必须相同。)
我尝试过平面汇编程序,但没有得到任何我能弄清楚如何使用的东西。我用它来汇编原始的SHL
代码,得到了非常不同的结果,而不是相同的字节。帮助?