您的足迹:首页 > 经验技术 >易语言 int64 位运算

易语言 int64 位运算

易语言那个位运算全部都是整数型32位的,没辙了,自己写个64位的,当做备忘吧,希望能帮到大家。

汇编内容是用VC写的,然后用OD反编译后自己重新写的,也许不够精炼,但应该比较稳定。


.版本 2
 
.程序集 位运算
 
.子程序 右移_, 长整数型, 公开, 将某整数的数据位右移指定位数,返回移动后的结果。本命令为中级命令。
.参数 欲移动的整数, 长整数型
.参数 欲移动的位数, 整数型
 
' push ebp
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 249, 64, 115, 22, 128, 249, 32, 115, 6, 15, 173, 208, 211, 250, 195, 137, 208, 193, 250, 31, 128, 225, 31, 211, 248, 195, 193, 250, 31, 137, 208, 195 })
' mov ebp,esp
' mov eax,[ebp+8h]
' mov edx,[ebp+Ch]
' mov ecx,[ebp+10h]
' call a0
' pop ebp
' retn Ch
' a0:
' cmp cl,40h
' jnb short a1
' cmp cl,20h
' jnb short a2
' shrd eax,edx,cl
' sar edx,cl
' retn
' a2:
' mov eax,edx
' sar edx,1Fh
' and cl,1Fh
' sar eax,cl
' retn
' a1:
' sar edx,1Fh
' mov eax,edx
' retn
返回 (0)
 
.子程序 左移_, 长整数型, 公开, 将某整数的数据位左移指定位数,返回移动后的结果。本命令为中级命令。
.参数 欲移动的整数, 长整数型
.参数 欲移动的位数, 整数型
 
' push ebp
置入代码 ({ 137, 229, 139, 69, 8, 139, 85, 12, 139, 77, 16, 232, 4, 0, 0, 0, 93, 194, 12, 0, 128, 249, 64, 115, 21, 128, 249, 32, 115, 6, 15, 165, 194, 211, 224, 195, 137, 194, 49, 192, 128, 225, 31, 211, 226, 195, 49, 192, 49, 210, 195 })
' mov ebp,esp
' mov eax,[ebp+8h]
' mov edx,[ebp+Ch]
' mov ecx,[ebp+10h]
' call a0
' pop ebp
' retn 0xC
' a0:
' cmp cl,40h
' jnb a1
' cmp cl,20h
' jnb a2
' shld edx,eax,cl
' shl eax,cl
' retn
' a2:
' mov edx,eax
' xor eax,eax
' and cl,1Fh
' shl edx,cl
' retn
' a1:
' xor eax,eax
' xor edx,edx
' retn
返回 (0)
 
.子程序 位与_, 长整数型, 公开, 如两个数值有某共同比特位为1,则返回值的对应位也为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
.参数 位运算数值一, 长整数型
.参数 位运算数值二, 长整数型
 
' push ebp
置入代码 ({ 137, 229, 139, 69, 8, 35, 69, 16, 139, 85, 12, 35, 85, 20, 93, 194, 16, 0 })
' mov ebp,esp
' mov eax,[ebp+8h]
' and eax,[ebp+10h]
' mov edx,[ebp+Ch]
' and edx,[ebp+14h]
' pop ebp
' retn 10h
返回 (0)
 
.子程序 位或_, 长整数型, 公开, 如两个数值中有一个数值的某一比特位不为零,则返回值的对应位就为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
.参数 位运算数值一, 长整数型
.参数 位运算数值二, 长整数型
 
' push ebp
置入代码 ({ 137, 229, 139, 69, 8, 11, 69, 16, 139, 85, 12, 11, 85, 20, 93, 194, 16, 0 })
' mov ebp,esp
' mov eax,[ebp+8h]
' or eax,[ebp+10h]
' mov edx,[ebp+Ch]
' or edx,[ebp+14h]
' pop ebp
' retn 10h
返回 (0)


本博客所有文章如无特别注明均为原创。作者:Lance.Moe复制或转载请以超链接形式注明转自 Lance's Blog
原文地址《易语言 int64 位运算

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)