概述

机器语言

##### 什么是机器语言?
#目前主流的电子计算机
状态:  0和1
#最早的程序员:穿孔卡带简化这些复杂的计算机语言,助记符,汇编语言
#就是把人能理解的语言,转换成机器理解的语言加 INC  -->编译器
减 DEC
乘 MUL
除 DIV

​ 汇编一般用于底层编写,单片机

进制

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

八进制:八进一

十进制:十进一

十六进制:16进1 . 0123456789abcdef

进制远远没有想象那么复杂, 查数

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

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

进制怎么运算?

八进制

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

二进制

为什么学习二进制?因为计算机使用二进制 01 .状态电子 物理极限:摩尔定律,硬操作!追求语言的极限!并发语言,软操作!

量子计算机:可以实现量子计算的机器。 (提高计算机的计算力)

​ 量子比特,量子叠加态,量子纠缠,量子并行原理。

传统计算机:集成电路 01 硅晶片!

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

光子:正交偏振方向

磁场:电子的自旋方向

二进制能否简写?六进制。  123456789abcdef为什么要学习理解二进制?寄存器,内存,位!底层的每一个位都是有含义的。汇编入门理解的基础!汇编高级:了解程序深层!操作系统的内核

数据宽度

​ 计算机的内存是有限制的,不可能无穷大。 所以给数据增加数据宽度

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

位 0 1

字节 0~0xFF

字 0~0xFFFF

双字 0~0xFFFFFFFF

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

有符号数和无符号数

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

​ 0 1 0 10 10

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

​ 无符号数规则

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 #负数-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 

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

寄存器:有8个通用寄存器,可以存任意值。 mov寄存器,值

位运算

计算机现在可以存储所有的数字的(整数,浮点数,字符),底层都是运算。

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 ~)

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

位运算(移动位 << >>)

0000 0001    1
0000 0010   2
0000 0100   4
0000 1000   8#左移*2(<<),右移/2(>>)

左移<< (shl)

0000 0001 @所有二进制位全部左移若干位,高位丢弃。低位补0
000 00010

右移 >> (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 0001
0000 1000
----------
0000 1001#第五步 与运算(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
---------
0000 0000#所以最终结果就是与运算为0的结果的上一个异或运算

4-5

#计算机时怎么操作的?
4+(-5)0000 0100
1111 1011   补码
-----------
1111 1111   ff0000 0100
1111 1011
--------- 异或(如果不考虑进位,异或可以直接出结果)
1111 11110000 0100
1111 1011
---------- 与
0000 0000最终结果   1111 1111 16 ff 10 -1#符号位又来了ff 255 -1

机器语言就是位运算,定义一些规则,就是数据宽度,有无符号数,原码反码补码。都是通过电路来实现的

这就是计算机最底层的本质

汇编语言

​ 通过指令代替二进制编码。然后用汇编命令给计算机发送一些操作,然后让计算机 执行。

在学习汇编之前需要先掌握环境的配置

(1.vc6(程序到汇编的理解),2.OD 3.抓包工具 4.加密解密工具)

学汇编不是为了写代码,而是理解程序本质的学习。

​ 《汇编语言》 16位的汇编 32位 64位(其实架构都是一样的,只是寄存器的不同,寻址能力增加)

汇编入门:了解汇编和程序的对应关系,程序的本质。

通用寄存器

寄存器

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

通用寄存器

# 32位通用寄存器只有8个存值范围 0-FFFFFFFF对于二进制来说,直接修改值。

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

计算机如何向寄存器存值

​ 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

8位:L代表低8位,H代表高8位

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

内存

1B=8bit

1KB=1024b

寄存器很小,而且不够用。 所以会把数据放到内存中。

程序真正运行的时候才会用到物理内存,计算机中内存地址很多,空间很大,每个空间分配一个地址,名字。

内存地址

存一个数:占用的大小,数据宽度。

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

内存如何存值?

​ 数据宽度:byte word dword

​ 地址的位置:0xFFFFFFFF

不是任意的地址都可以写东西和申请使用的!!!!!!!!!!!!!

只有程序申请过的内存才可以操作。

汇编如何向内存中写值???
mov 数据宽度 内存地址,值mov 内存地址,1mov byte ptr ds :[0xFFFFFFFF],1  传递值的大小一定要和数据宽度相等。

(内存地址有多种写法)

偏移:内存地址+值

内存地址偏移 ds:[0x19FF70+4]

ds:[eax]

寄存器偏移 ds:[eax+4]

**

存一个数:占用的大小,数据宽度。

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

内存如何存值?

​ 数据宽度:byte word dword

​ 地址的位置:0xFFFFFFFF

不是任意的地址都可以写东西和申请使用的!!!!!!!!!!!!!

只有程序申请过的内存才可以操作。

汇编如何向内存中写值???
mov 数据宽度 内存地址,值mov 内存地址,1mov byte ptr ds :[0xFFFFFFFF],1  传递值的大小一定要和数据宽度相等。

(内存地址有多种写法)

偏移:内存地址+值

内存地址偏移 ds:[0x19FF70+4]

ds:[eax]

寄存器偏移 ds:[eax+4]

2020.11.03

ps:看狂神的课总是让我觉得底层也不是那么无聊了…对底层也是越发的有兴趣了

====================================================

汇编指令

内存复制

堆栈指令

汇编如何写函数

堆栈传参

堆栈平衡

2020.11.03 底层相关,汇编相关推荐

  1. 2020/11/03:图片验证码和短信验证码

    2020/11/03:图片验证码和短信验证码 图形验证码: 流程: 看懂前端代码,理清逻辑思路,画的出流程图 settings.py配置: # 缓存配置 CACHES = {'default': {' ...

  2. 6848. 【2020.11.03提高组模拟】融入社会的计划

    Description Input Output 一行一个整数表示答案. upd:  无解输出-1. Sample Input Sample Input1 6 6 13 11 1 1 4 5 5 Sa ...

  3. 2020.11.03 使用OpenCV进行图像上采样、降采样以及高斯不同操作【OpenCV C++】

    图像上采样,降采样以及高斯不同操作 源代码: // testOpencv12.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include &l ...

  4. QIIME 2教程. 03老司机上路指南Experience(2020.11)

    文章目录 老司机上路指南 本节视频视频教程 为什么要改用QIIME 2? 老司机上路前的几点建议 数据处理步骤 数据导入 样本拆分 双端合并 去除非生物序列 相似序列分组 去噪 OTU聚类 物种分类 ...

  5. QIIME2教程. 03老司机上路指南Experience(2020.11)

    老司机上路指南 QIIME 2 for Experienced Microbiome Researchers https://docs.qiime2.org/2020.11/tutorials/qii ...

  6. QIIME 2教程. 32如何写方法和引用Citing(2020.11)

    文章目录 引用QIIME 2 引用插件 检索特定于插件的引用 Retrieving plugin-specific citations 使用来源追溯列出引用 Using provenance to l ...

  7. C语言3067答案,教师招聘《小学教育心理学》通关试题每日练(2020年03月03日-3067)...

    1:将学习策略分为基本策略和支持策略的是( ). 单项选择题 A.丹瑟洛 B.尼斯比特 C.皮连生 D.鲍斯菲尔德 2:奠定儿童人格和心理健康基础的是( ). 单项选择题 A.社会 B.家庭 C.学校 ...

  8. QIIME 2教程. 04人体微生物组分析Moving Pictures(2020.11)

    文章目录 QIIME 2用户文档. 4人体各部位微生物组 本节视频视频教程 启动QIIME2运行环境 样本元数据 下载和导入数据 拆分样品 序列质控和生成特征表 方法1. DADA2 方法2. Deb ...

  9. QIIME 2教程. 01简介和安装 Introduction Install(2020.11开始更新)

    写在前面 QIIME是微生物组领域最广泛使用的分析流程,10年来引用20000+次,2019年Nature杂志评为近70年来人体菌群研究的25个里程碑事件--里程碑16:生物信息学工具助力菌群测序数据 ...

最新文章

  1. 抗击疫情,AI一直在行动
  2. 三星 Nexus S刷MIUI ROM最新图文刷机教程
  3. mxnet基础到提高(35)-ndarray
  4. leetcode 421. Maximum XOR of Two Numbers in an Array | 421. 数组中两个数的最大异或值(位运算,Trie前缀树)
  5. matlab 中 eps 的分析
  6. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(1)
  7. Biztalk中Host Instance线程控制
  8. 【MOOC-生物信息学-蛋白质结构预测与分析】(占坑)
  9. 点符号垂直居中 html,word垂直居中 word中垂直居中符号在哪里?
  10. linux双网卡连不上网,linux 双网卡配置问题
  11. 论手机网站(wap)网页广告防屏蔽的方法
  12. 效果图是怎么做出来的?
  13. 朴素贝叶斯分类器(离散型)算法实现(一)
  14. 参考汉语拼音,越南语的元音和辅音如何发音
  15. mysql中修改表字段名/字段长度/字段类型详解
  16. 来自NULL的程序人生大作业
  17. 每个开发人员应该尽早了解的内容
  18. 测绘公司进入波特城项目地展开工作
  19. em算法怎么对应原有分类_彻底搞懂EM算法
  20. 机器学习是什么?我对机器学习的理解

热门文章

  1. 基于YOLOv7的芯片表面缺陷检测系统(源码&教程)
  2. arduino灯光装置_创客实战 | 用Arduino制作一款奇幻的“灯光隧道”
  3. 在windows下制作mac os x的启动安装U盘
  4. jQuery(入门选择器)
  5. 昆兰士科技大学计算机排名,2019QS学科排名重磅发布!昆士兰科技大学多个学科跻身全球前100...
  6. focus search returned a view that wasn't able to take focus!【已更新】
  7. 支付宝新年五福新玩法,我用Python百行代码来实现!
  8. 有什么好的电影网站,好的在线电影网站
  9. lombok基本使用
  10. 龙世界java游戏_我的世界:当Notch在6年后重回mc,会发生什么?萌新的像个弟弟...