b站up小甲鱼的视频,整理的笔记
概述
汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程(效率比较高)
汇编语言是除了机器语言之外,我们能够操纵的最底层的语言了,所以它的重要性是不容忽视的
- 研究重点:如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作,用汇编的思维去写程序
- 对底层有大致的了解,对 CPU、内存各种硬件是如何配合的,如何传输信息的
- 用计算机的思维操作计算机
1.1 机器语言
是机器指令的集合
机器指令:就是一台机器可以正确执行的命令
指令:01010000(PUSH AX)
电平脉冲(0为低电压,1为高电压)
故事:原先是把数字打在纸带或卡片上,1打孔,0不打孔
机器码:一堆0和 1 的组合
1.2 汇编语言的产生
汇编语言的主体是汇编指令
汇编指令 VS 机器指令:指令的表示方法上。
汇编指令是机器指令便于记忆的书写格式
汇编指令是机器指令的助记符
机器指令:1000100111011000
操作:寄存器BX的内容送到AX中
汇编指令:MOV AX,BX (后面的移动到前面,bx移动到ax,操作一般是三个英文缩写)
这样的写法与人类语言接近,便于记忆和阅读
寄存器
寄存器:嵌入到 CPU中的内存,一个 CPU 中有多个寄存器
AX 是其中一个寄存器的代号(他不是一级缓存,而是比缓存更接近 CPU 的)
不同代号的寄存器有不同的作用
Q:计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢?
A:C++ 翻译成汇编语言,通过编译器变成机器码
OllyDbg反编译软件,拿到的是数据的地址,反汇编只能得到汇编语言,永远不能反编译出C语言,因为一个C语言的语句可以对应各种各样组合的汇编语言,所以你反编译成c语言是会出现很大的错误的
1.3 汇编语言的组成
- 汇编指令(机器码的助记符)
- 伪指令(由编译器执行)
- 其他符号(由编译器执行)
汇编语言核心:汇编指令,它决定了汇编语言的 特性
1.4 存储器
- CPU是计算机的核心部件,它控制整个计算机的混作并进行运算,要想然一个 CPU 工作,就必须向它提供指令和数据
- 指令和数在存储器中存放,也就是平时所说的内存
- 一台 PC 机内存的作用仅次于 CPU
- 离开了内存,性能再好的 CPU 也无法工作
- 磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被 CPU 使用
1.5 指令和数据
- 指令和数据是应用上的概念
- 在内存或磁盘上,指令和数据没有任何区别,都是二进制信息
二进制信息:
1000100111011000
89D8H(数据)
H代表Hex,十六进制
1000100111011000
MOV AX,BX(程序)
1.6 存储单元
存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号(不一定是内存,还有显存啊等等 ,GPU 的速度比 CPU 的 速度快多了)
例如:
一个存储器有128个存储单元,编号从 0 ~ 127
对于大容量的存储器一般还用一下单位来计算容量(以下用 B 来代表 Byte )
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1024 就是
磁盘的容量单位同内存的一样