1.1 概述
汇编语言是你的必经之路。
计算机语言 是 二进制代码。而汇编语言是对其二进制代码的加工,进而把一些二进制代码 加工成了 英文单词 作为它的助记符。
- 什么是进制 ?
进制是进位计数制,是人为定义的带进位的计数方法。比如十进制,是逢十进一,没有十的代表符号(0 1 2 3 4 5 6 7 8 9)。二进制就是逢二进一,也没有二的代表符号(0 1)。
- 目录大纲
- 入门部分:
为什么要学习汇编语言
进制如何运算
二进制
数据宽度
有符号数和无符号数
原码反码补码(所有人最头疼的基础部分)
位运算
位运算计算(来实现加减乘除)
汇编(OD反汇编工具)
寄存器
内存
- 进阶部分:
汇编指令
内存复制
堆栈的指令
汇编如何写函数
堆栈传参
堆栈如何平衡
外挂
1.2 为什么要学习汇编语言
- 什么是语言 ?
答:人与人交流的工具,它还有很多种。比如中文,英语等…你想和外国人交流最基本的英语是必须要会的,否则没办法交流。同理,你想和计算机交流,计算机语言你也是必须要会的!所以要去学习计算机的语言(机器语言 二进制代码 0 1)
我们目前主流的是电子计算机
状态只分:0 和 1 两种
最早的程序员:他们是用穿孔卡带来写程序的。
加减乘除 的本质 都是 "加法"
而对于计算机而言,你要进行四则运算的某个运算时,必须输入一串二进制代码,也就是 命令。来 告诉计算机。否则它根本不知道你要干什么。。
那么无论是 数据 还是 命令,都是用 二进制代码表示的。二进制虽然看似简单。但过多灵活的排列组合方式,会使二进制代码变得异常复杂和难记。那么能简化吗? ———— 助记符诞生了!
加:ADD、ADC、INC --> 编译器 (加法二进制代码)
减:SUB、SBB、DEC --> 编译器 (减法二进制代码)
乘:MUL、IMUL --> 编译器 (乘法二进制代码)
除:DIB IDIV --> 编译器 (除法二进制代码)
这个编译器,就相当于一个 翻译器(翻译官),为我们 输入的汇编代码进行翻译,变成 二进制代码。翻译后,计算机就能看懂了。
所以内存里面 只改变一个 位,其实就会发生翻天覆地的变化!!!因为计算机语言 是 二进制代码。而一个二进制 代表一位!
现在汇编 一般用于 底层的编写和单片机。因为 已经出现了更加简化的 语言 --> 高级语言(C/C++)
由于,我们现在 都是 向上学习,而忽略了向下学习。导致C/C++ 的程序员 解决问题可能需要 问 汇编的程序员,而Java 的程序员解决问题可能 要去 问 C/C++ 的程序员。这是很无厘头的…而我们说如果 你想要真正的 学好计算机这门学科,也需要 对 底层有一定的了解!而对底层了解的第一步 就是 学好 进制 和 汇编!
1.3 进制的思想本质
二进制 ? 0 1
学习进制的障碍 ?
学习进制的障碍:就是我们的十进制!
因为人类天生有十只手指,所以我们才会选择 10 进制。所以并不是只有 十进制,也不是 只有 十进制 最方便!对于计算机来说 二进制 就是最方便的 进制(也是 它自己的 最优策略)。 ———— 因为计算机 最基本的组成单位是 电子元器件,而电子元器件 最本质的状态 只有两种 即 电流通过 为 1,电流断开 为 0。
- 进制
1 进制:一进一,结绳计数(无限的 往下 进位)。
2 进制:二进一,计算机 0 1 满 二 则 进 1
8 进制:八个符号组成(0 1 2 3 4 5 6 7) 缝八进一。
10 进制:十个符号组成(0 1 2 3 4 5 6 7 8 9)逢十进一。
16 进制:十个符号组成(0 1 2 3 4 5 6 7 8 9 A B C D E F)逢十六进一。
进制的本质:其实就是 查数和基本映射表。
- 一进制
1
1 1
1 1 1
- 三进制
0 1 2
10 11 12
100 101 102
110 111 200
201 202 210
211 212 220
221 222 1000
- 八进制
0 1 2 3 4 5 6 7
10 11 12 13 14 15 16 17
20 21 22 23 24 25 26 27
30 …
- 十六进制
0 1 2 3 4 5 6 7 8 9 A B C D E F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 …
- 二进制
0 1
10 11
100 101
110 111
1000 1001
1010 1011
1100 1101
1110 1111
==1111 --> F(16)==其实 二进制 数到 第 15个数不也就相当于 十六进制 的 F 吗 ?
所以进制的转换,实际上 来源于 查数!只是我们后期研究出了方便进制转换的技巧和公式而已。
进制如果学好了,其实可以解决 1 + 1 = 3 的问题!
解析:符号不是固定的!!所以我们可以写出自己的 十进制符号。
我的十进制符号:0 1 3 2 4 5 6 7 8 9
那么 1 + 1 = 3 就是正确的了!
这就属于比较 高级的进制加密!进制加密如何破解呢?
答:在数据量非常大的前提下,根据统计学,逐步分析其规律性。然后提取出公式。就知道 这些 符号原本想表达的意思是什么了。