汇编语言

本文深入探讨了计算机语言的基础,从机器语言的01编码到汇编语言的助记符,揭示了程序执行的本质。介绍了不同进制的运算规则,包括二进制、八进制和十六进制,并通过实例解释了如何进行计算。同时,讲解了有符号数和无符号数的规则,以及位运算在计算机中的重要作用,如加法、减法、乘法和除法的实现。最后,提到了汇编语言作为底层编程的重要工具,理解和掌握汇编有助于深化对计算机程序本质的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言

语言

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

什么是机器语言?

1、# 我们目前主流的电子计算机!
2、 0 和 1
3、# 最早的程序员:穿孔卡带
4、加	0100 0000
5、减	0100 1000
6、乘	0100 1000 0100 1000
7、除	0100 1000 1100 1000

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

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

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

C语言

加 A+B
减 A-B
乘 A*B
除 A/B

进制

二进制?0 1

学习禁止的障碍?十进制、八进制、二进制

跳出固有(十进制)思维的方法!”屈指可数“

二进制

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

进制?

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

二级制:二进一。计算机

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

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

十六进制:十六进一。十六个符号组成: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~20
    0	1	2
    10	11	12
    20	21	22
    100	101	102
    110	111	112
    120	121	122
    
# 七进制 1~20
    0	1	2	3	4	5	6
    10	11	12	13	14	15	16
    20	21	22	23	24	25	26
    100	101	102	103	104	105	106
 

问题:真的理解进制了吗?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=24

# 预算的本质就是查数
0	1	2	3	4	5	6	7	10	11	12	13	14	15	16	17	20	21	22	23

277+233=?
276*54=?
277-54=?
234/4=

八进制表格:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpyxFl3K-1610027346592)(C:\Users\zkx\AppData\Roaming\Typora\typora-user-images\image-20210107193008702.png)]

## 运算的本质就是查数
277+233=632
276*54=20250
277-54=
234/4=47

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

二进制

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

量子计算机:(传道)

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

传统的计算机:集成电路!0 1 ~硅晶片!

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

光子:正交偏振方向。

磁场:电子的自旋方向。

21世纪,计算力,快到尽头了!

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

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

二进制	:0	1111
0 10 11 100 101	110	111	1000 1001 1010 1011	1100 1101 1110 1111

二进制简写?

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

这就是我们的16进制。

操作系统 – 课程

为什么要学习理解二进制?

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

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

数据宽度

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

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 十进制:154
  • 有符号数规则

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

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

原码反码补码

之后要用它来进行计算。

编码规则

有符号数的编码规则

  • 原码:最高位符号位。对其他的位进行本身绝对值即可
  • 反码:
    • 正数:反码与原码相同
    • 负数:符号位一定是1,其余位对原码取反
  • 补码:
    • 正数:补码与原码相同
    • 负数:符号位一定是1,对反码+1
# 测试
# 八位
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
#结论:
#如果是正数,那都是一样的

#如果是负数,
-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

# 八进制
3:11
5:101
3+5=1000
# 二进制的标志......
2	10
4	100
8	1000
16	10000


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

寄存器:存值

通过mov指令存值

位运算

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

0 1

位运算

2*8最高效计算方式。

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

与运算(and &)

计算机的本质

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

或运算(or |)

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

异或运算(x or^)

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

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

取反操作!

1011 0001
------------非运算
0100 1110

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

位运算(移动位)

左移*2,右移/2

0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8

二进制、位运算 — 实现加减乘除

位运算的加减乘除

计算机只认识0 1

基本数学是建立在加减乘除

4+5=?

# 计算机是怎么操作的?
0000 0100 
0000 0101
-----------加法:计算机是不会直接加的

# 计算机的实现原理

# 第一步:异或:如果不考虑进位,异或就可以直接出结果
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的结果上一个异或运算。

从零自己设计一套进制规则,自己设计电路,来实现加减乘除,手动转换这个结果和值十进制和二进制转换!

机器语言就是位运算,都是电路来实现的。这就是计算机的最底层的本质!

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

汇编语言

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

通过汇编指令可以给计算机发一些操作,然后让计算机执行 – 编译器的发展,底层的大佬,几乎都是最原始的IDE。

在学习汇编之前,需要先掌握环境的配置(1、VC 6;2、OD)。

学汇编不是为了写代码

理解程序的本质。懂汇编,可以解决所有的问题。

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

通用寄存器

寄存器:

存储数据:CPU > 内存 > 硬盘

32位CPU 8 16 32

64位CPU 8 16 32 64

通用寄存器,可以存取任意的值

# 32位的通用寄存器只有8个

存值的范围:0~FFFFFFFF

对于二进制来说,直接修改值

计算机如何向寄存器存值

mov指令

mov 存的地址,存的数
mov 存的地址1,存的地址1

可以将数字写道寄存器,可以将寄存器中的值写到寄存器。

计算机:计算力!

不同的寄存器

		 FFFF	  FF
32位		16位		8位
EAX		 AX		  AL
ECX		 CX		  CL
EDX		 DX		  DL
EBX		 BX	 	  BL
ESP		 SP	 	  AH
ENP		 NP		  CH
ESI		 SI		  DH
EDI		 DI		  BH

除了这些通用寄存器之外,那么其他的寄存器每一位都有自己特定的功能!

内存

寄存器很小,不够用。所以,需要数据放到内存!

每个应用程序进行都有4GB的内存空间。空头支票。

程序真正运行的时候,才会用到物理内存。

1B = 8 bit

1KB = 1024 B

1MB = 1024KB

1GB =1024 MB

4G的内存,4096m =>最终计算为位,就是这个可以存储的最大容量。

内存地址

存一个数:占用的大小,数据宽度!存到哪里?

计算机中内存地址很多,空间很大,每个空间分配一个地址,名字。

每个内存地址都有一个编号!可以通过这些编号往里面存值!

内存如何存值?

数据宽度:byte word dword

地址的位置:0xFFFFFFFF

不是任意的地址都可以写东西的,申请使用!申请过的内存才可以使用

汇编如何向内存中存值!
mov 数据宽度 内存地址,1
mov byte/word/dword/qword ptr ds:[地址],1
传递的值的大小一定要和数据宽度相等!

内存有多种写法

  • 内存地址偏移
  • 寄存器偏移
  • 寄存器
  • 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值