二进制到汇编(1)

概述

语言

进制

进制如何运算

二进制

数据宽度

有符号数和无符号数

原码反码补码

位运算

位运算计算

汇编

寄存器

内存

汇编指令

内存复制

堆栈的指令

汇编如何写函数

堆栈传参堆栈平衡

外挂

语言

人与人沟通?语言! 老外! 计算机! 学习计算机的语言!

什么是机器语言?

# 我们目前主流的电子计算机!
 状态 :0 和 1
 # 最早的程序员,穿孔卡带!
 加 0100 0000
 减 0100 1000
 乘 0100 1000 0100 1000
 除 0100 1000 1100 1000

这些复杂的机器语言,能简化吗?助记符!汇编语言!人能够理解的语言转换为机器能够理解的语言!

加 INC  -编译器-> 0100 0000
 减 DEC           0100 1000
 乘 MUL           0100 1000 0100 1000
 除 DIV           0100 1000 1100 1000

离程序的本质:隔阂!汇编一般用于底层的编写,单机片…

C语言

加 A+B  -编译器-> 0100 0000
 减 A-B           0100 1000
 乘 A*B           0100 1000 0100 1000
 除 A/B           0100 1000 1100 1000

暴破

底层:VC6 OD

进制

二进制?0 1

学习进制的障碍?

10进制!

人类天然的选择就是10进制,10个指头。跳出固有思维的方法!”屈指可数“

二进制

思想:每一种进制都是完美的,都有自己的计算方式!

进制?

1进制:一进一,结绳记事。1 1

2进制:二进一,计算机

八进制:八进一,8个符号组成:0 1 2 3 4 5 6 7

10进制:10进一,10个符号组成:0 1 2 3 4 5 6 7 8 9

16进制:16进一,16个符号组成:0 1 2 3 4 5 6 7 8 9 a b c d e f

进制远远没有大家想的那么复杂。查数

测试

# 一进制   1~20
 1
 1 1
 1 1 1
 1 1 1 1
 ....
 ​
 # 三进制  1~20
 十进制:0  1   2  3    4    5   6  7   8   9    10
 三进制:0  1   2  10   11   12  20 21  22  100  101 102 110 111 112 120 121 122
 ​
 #二进制
        0  1  10  11   100  101  110  111  1000
        
        
        
 # 七进制  1~20
 0   1   2   3   4   5   6   
 10  11  12  13  14  15  16
 20  21  22  23  24  25  26

问题:你真的理解进制了吗?1+1=3对吗?!如果你可以使用进制来解答这个问题,那么你就学会了!

十进制:0 1 2 3 4 5 6 7 8 9

狂神的十进制: 0 2 4 7 8 a b r d f,可以自己随便定义的,学习,创造者!

加密解密:程序员,破解程序的人!进制的加密

数字量一大,总是有规律的!

进制怎么计算

# 八进制计算下面的结果
 2+3=5
 2*3=6
 4+5=11 #就是从4往后面数数+5所以就往后数5个就是11
 4*5=24 # *5就是从4往后面数5组即为24,从4开始每组4个5组
 ​
 # 运算的本质就是查数
 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27
 ​
 # 八进制计算下面的结果  九九乘法表=加法表!
 277+333 =
 276*54 = 
 237-54 =
 234/4 =

八进制的乘法表

1*1=11*2=21*3=31*4=41*5=51*6=61*7=7
2*2=42*3=62*4=102*5=122*6=142*7=16 
3*3=113*4=143*5=173*6=223*7=25  
4*4=204*5=244*6=304*7=34   
5*5=315*6=365*7=43    
6*6=446*7=52     
7*7=61      

八进制的加法表

1+1=2      
1+2=32+2=4     
1+3=42+3=53+3=6    
1+4=52+4=63+4=74+4=10   
1+5=62+5=73+5=104+5=115+5=12  
1+6=72+6=103+6=114+6=125+6=136+6=14 
1+7=102+7=113+7=124+7=135+7=146+7=157+7=16
# 运算的本质就是查数
 ​
 277
 333     +
 ----------
 632
 ​
 ​
       276
        54  *
 ------------
      1370
     1666   +
 ------------
     20250
 ​
 # 减法的本质其实就是加法!  237-54 = 237 +(-54)
 --------
 # 除法的本质,除数乘以那个数最接近结果即可!
 234             #思路:这里先使用2除以4发现除不懂然后看23除4去乘法表查看
   4                   看看哪两个数相乘最接近23,这里发现4*4=20,然后等
 ------                于4在看34除以4,看看哪两个数相乘接近发现4*7=34,
  47                   所以等于47.

结论:无论是什么进制,本身都是有一套完美的运算体系的,我们都可以通过列表的方式将它计算出来!

二进制

计算机使用二进制 0 1! 状态!电子! 物理极限:摩尔定律!硬操作!追求语言的极致!并发语言!软操作 !

量子计算机:(传道)

可以实现量子计算的机器。

传统的计算机:继承电路! 0 1 。硅晶片!

量子计算机的单位:昆比特。(量子比特!)量子的两态来表示。

光子:正交偏振方向。

磁场:电子的自旋方向。

21世纪。计算机。快到尽头了!【落伍】本质问题!

量子计算机!提高计算机的计算力。

量子比特、量子叠加态、量子纠缠、量子并行原理……

2019年,Google研究人员展示其最新54比特量子计算机,该计算机只用200秒便可以计算完毕当前世界最大的超级计算机需1万年进行的运算。

2020年,6.18。量子体积64的量子计算机!!!

霍尼韦尔还表示,将在一年之内得到至少10个有效量子比特,相当于1024个量子体积。量产!

电子计算机 == 量子计算机!

回到我们的电子计算机! 0 1!

二进制: 0   1111
  0   1  10  11  100  101 111  1000   1001  1010  1110  1111

二进制这么去写很麻烦!二进制能否简写!

0   1  2  3  4  5   6  7  8  9   10  a  b  c  d  e  f

这就是我们的16进制!

课程上的教学!2进制转换为10进制。然后计算!

为什么要学习二进制?

寄存器、内存、位!底层的每一个为都是有含义的。汇编入门理解的基础!

汇编高级:了解程序的深层!操作系统的内核?

数据宽度

计算机:内存!给数据增加数据宽度。

C 和 C++ Java都需要定义数据的类型。计算机底层需要我们给这些数据定义宽度。

位 0 1

字节 0-0xFF

0-0xFFFF

双字 0-0xFFFFFFFF

在计算机中,每一个数据都需要给它定义类型。给它定义宽度。在内存中的宽度。

有符号数无符号数

数据都是有宽度的。每个数据代表什么意思?二进制

0 1 0 1 0 1 0 1

规则,二进制解码增加一个规则?

无符号数规则

你这数字是什么,那就是什么。

1 0 0 1  1 0 1 0十六进制:0x9A

有符号数规则

最高位是符号位:1(负数) 0(正数)

1 0 0 1  1 0 1 0 如何转换?

原码反码补码

之后要用它来计算。

编码规则

有符号数的编码规则

原码:最高位符号位,对其他的位进行本身绝对值即可。

反码:

  • 正数:反码和原码相同

  • 负数:符号位一定是1,其余位对原码取反

补码:

  • 正数:补码与原码相同

  • 负数:符号位一定是1,反码+1

测试

# 现在我说的这些都是8位
 # 如果是正数,那都是一样的。
 1
 # 原码 0 0 0 0  0 0 0 1
 # 反码 0 0 0 0  0 0 0 1
 # 补码 0 0 0 0  0 0 0 1
 ​
 # 现在我说的这些都是8位
 # 如果是负数
 -1
 # 原码 1 0 0 0  0 0 0 1
 # 反码 1 1 1 1  1 1 1 0
 # 补码 1 1 1 1  1 1 1 1
 ​
 -7
 # 原码 1 0 0 0  0 1 1 1
 # 反码 1 1 1 1  1 0 0 0
 # 补码 1 1 1 1  1 0 0 1
 ​
 ​
 1 10 11 100 101 110 111
 ​
 记忆思路:
 2     10
 4     100
 8     1000

如果看到一个数字,二进制的,需要了解他是有符号数还是无符号数。

寄存器:mov 寄存器,值

学习通过直接操作来查看是最有效的。

位运算

计算机现在可以存储所有的数字(整数,浮点数,字符)的,运算!

0 1

位运算?

2*8 最高效计算方式

很多底层的调试器。需要通过位来判断CPU的状态。

与运算(and &)

计算机的本质。

1011 0001
1101 1000
----------	与运算
1001 0000

或运算(or |)

1011 0001
1101 1000
----------	或运算
1111 1001

异或运算(xor ^)

不一样就是1。

1011 0001
 1101 1000
 ----------  异或运算
 0110 1001

非运算(单目运算符 not ~)

0就是1,1就是0,取反!

1101 1000
 -----------
 0010 0111

通过这些可以完成加减乘除!位运算来实现加减乘除!

位运算(移动位)

左移:(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 1000 #进位的结果

# 第四步:异或!
0000 0001				# 第一步的结果
0000 1000				# 第三步进位后的结果
-------------
0000 1001

# 第五步,与运算(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
-------------
0000 0000

# 所以最终的结果就是与运算为0的结果的上一个异或运算。

4-5?

# 计算机是怎么操作的!
4+(-5)

0000 0100
1111 1011
---------- (减法:计算机是不会直接减的)
1111 1111

0000 0100
1111 1011
---------- 异或(如果不考虑进位,异或就可以直接出结果)
1111 1111

0000 0100
1111 1011
---------- 与(判断进位,如果与运算结果为0,没有进位)
0000 0000

最终结果 1111 1111  16 ff  10  -1

乘:x*y,就是y个x相加,还是加法

除:x/y,本质就是减法,就是x能减去多少个y。

计算机只会做加法!

通过机器语言来实现加法计算器。设计电路。

汇编语言环境说明

通过指令来代替我们的二进制编码!

通过汇编指令可以给计算机发一些操作,然后让计算机执行。编译器。

在学习汇编之前,大家需要先掌握环境的配置(1、Vc6(程序到汇编的理解),2、OD!3、抓包工具,4、加密解密工具)

学汇编不是为了写代码

理解程序的本质。

《汇编语言》 16位的汇编 32位 64位(本质架构区别不大,寻址能力强)

建议大家可以直接学习32位汇编!

汇编入门:了解汇编和程序的关系,程序的本质即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值