- 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令
- 汇编语言可以通过编译得到机器语言, 机器语言可以通过反汇编得到汇编语言.
- 高级语言可以通过编译得到汇编语言\机器语言, 但汇编语言\机器语言几乎不可能还原成高级语言.
例如:
最左边是代码(机器码)的内存地址, 中间是机器码, 最右边是汇编代码
两者的汇编代码和机器码相同, 所以如果有这样一段汇编代码, 是还原不出它的c语言代码的. - 软件\程序的执行过程
程序\软件都在硬盘上, 当程序要跑起来时, 要把它装载到内存中, 生成的可执行文件都是机器码(已经转变好0和1了), CPU在读写内存中的机器码, 控制计算机做一些事情.
CPU内部有寄存器, 运算器(信息处理), 控制器(控制其他器件进行工作), 因为CPU访问寄存器对寄存器做一些运算比对内存做快.
例如:
int a = 3;
inti b = a + 1;
a 和 b 都存放在内存中, 但在做加法运算的时候, 并不是直接对内存这个东西进行加法的, 它会先把内存中的东西拿到寄存器, 然后再把寄存器中的东西加1, 然后在把加完的结果再送回到内存. 因为寄存器的访问速度更快, 所做的运算很多时候是直接对寄存器做的运算, 不是直接对内存做运算.
即CPU会先将内存中的数据存储到寄存器中, 然后在对寄存器中的数据进行运算.
上面的c语言代码转为汇编代码:
mov [a], 3
mov eax, [a]
add eax, 1
mov [b], eax
注: 上面的不是严格的实际的汇编代码
代码的执行效率分析
(1)if-else和switch, 谁的效率高
CPU执行一条机器代码的时间是差不多的, 所以看汇编代码的行数就可以了.
存放机器码的内存地址是连续的
int no = 4;
mov 是赋值的意思
cmp 是比较的意思
sub 是减法的意思