13.x86游戏实战-汇编指令neg shr shl sar

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:12.x86游戏实战-汇编指令and or not

neg 是取反之后加+1

shr 是右移运算

shl 是左移运算

sar 是右移运算,它与shr的区别是sar会看最高位(最左边第一个位就是最高位),最高位是1它会补1shr不管是不是1它都会补0

代码

首先是neg eax,如下图现在eax的值被我手动改成了1

手动改计算机的值的方式,双击下图红框位置

在下图红框位置输入要改成的数字,然后点确认

然后执行neg eax,然后它就变成了FFFFFFFF,也就是-1,如果是not这个取反它的结果会是-2

然后再手动把eax的值改成2

然后执行shr eax,2,这个一句的意思是往右移动两位(右移几位取决于shr eax,2中的2,这里写3它就移动3位,写几就移动几位,shl、sar也是同理)它的结果就变成了0

变成0的原因,2的二进制是010,往右移2为就是000,下图红色横线标出来的两个0就是通过shr指令加的,一般这种加的两个0会被称为补两个0

然后再次把eax的值手动改成2

然后执行shl eax, 2,然后eax的值就变成了8

变成8的原因,二进制并不是图里写的就那么几位,计算机中32位程序里有32位,64位里有64位,图里写的位数少是为了好看

现在eax的值是8

然后执行sar eax,2,然后结果是2,最高位是0它就补0,最高位是1它就补1

然后把eax 的值改成FFFFFFFF,也就是-1

然后执行sar eax,2,结果还是-1,最高位是1它补1合着没变化

c++代码

#include <iostream>
#include "Windows.h"

int main()
{

	int a = 10;
	int b = 2;
	int c = 3;
	int d = 4;
	int e = -1;

	_asm {
		neg a
		shr b,2
		shl c, 2
		sar d,2
		sar e, 2
	}
	printf("%d, %d, %d, %d, %d", a, b, c, d, e);
	printf("====");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值