寄存器:mov寄存器,值
![](https://i-blog.csdnimg.cn/blog_migrate/0a3b2c287883914d02ea7c66d07abd8c.png)
学习通过直接操作来查看是最有效的。
FFFF FFFF 代表32个1,无符号的话是正数 有符号的话是负数
位运算
计算机可以存储所有的数字(整数,浮点数,字符)的。运算!
0 1
位运算?
2*8最高效计算方式。
很多底层的调试器。需要通过位来判断CPU的状态。
与运算(and &)
两个都为1,结果为1
计算机的本质。
1011 0001
1101 1000
----------- 与运算
1001 0000
或运算(or |)
只要有一个1,结果为1
1011 0001
1101 1000
----------- 或运算
1111 1001
异或运算(xor ^)
不一样就是1。
1011 0001
1101 1000
----------- 异或运算
0110 1001
非运算(单目运算符 not ~)
0就是1,1就是0。取反!
1101 1000
----------- 非运算
0010 0111
通过这些可以完成加减乘除!位运算怎么实现加减乘除!
位运算(移动位)(对于十进制来说,左移*2,右移/2)
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
左移:(shl <<)
0000 0001 @ 所有的二进制位全部左移若干位,高位就丢弃了。低位补0(左边为高位,右边为低位)
0000 0010
右移(shr >>)
0000 0001 @ 所有的二进制位全部右移若干位,低位就丢了。高位就需要补0,1(符号位决定)
0000 0000
二进制、位运算 ==> 加减乘除
位运算的加减乘除
计算机只认识 0 1
基本数学是建立在 加减乘除(加法)
加:4+5?
# 计算机是怎么操作的!
0000 0100
0000 0101
------------ (加法:计算机是不会直接加的)
0000 1001
# 计算机的实现原理
# 第一步:异或(如果不考虑进位,异或可以直接出结果)
0000 0100
0000 0101
------------
0000 0001
# 第二步:与运算(判断进位,如果运算结果为0,没有进位)
0000 0100
0000 0101
------------
0000 0100
# 第三步:将与运算的结果,左移一位
0000 0100
------------
0000 1000
# 第四步:异或(第一步和第三步的结果)
0000 0001
0000 1000
------------
0000 1001
# 第五步:与运算(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
------------
0000 0000
# 所以最终的结果就是与运算为0的结果的上一个异或运算。
减:4-5?
# 计算机是怎么操作的!
4+(-5)
0000 0100
1111 1010
------------ (减法:计算机是不会直接减的)
1111 1111 ff -1
# 第一步:异或(如果不考虑进位,异或可以直接出结果)
0000 0100
1111 1010
------------
1111 1111
# 第二步:与运算(判断进位,如果运算结果为0,没有进位)
0000 0100
1111 1010
------------
0000 0000
# 最终结果 1111 1111 16进制:ff 10进制:-1
**乘:**x*y,就是y个x相加,还是加法
**除:**x/y,本质就是减法,就是x能除去多少个y。
计算机只会做加法!
机器语言就是位运算。都是电路来实现的。这就是计算机的最底层的本质。
通过机器语言来实现加法计算器。设计电路。
汇编语言环境要求
通过指令来代替我们的二进制编码!
通过汇编指令可以给计算机发一些操作,然后让计算机执行。
编译器的发展,底层的大佬,几乎都是最原始的IDE。
在学习汇编之前,大家需要先掌握环境的配置。
(1、VC 6 (程序到汇编的理解);2、OD;3、抓包;4、加密解密工具)
学汇编不是为了写代码
理解程序的本质。汇编。
《汇编语言》 16位的汇编 32位 62位 (本质区别不大)
可以直接学习32位的汇编!
汇编入门:了解汇编和程序的对应关系,程序的本质即可!