这里只是做一个简单的框架梳理,不填充内容了,复习着发现这学期复习策略还是错的,老是想玩点花的,但是事实证明还是陪了我12年的学习方式,那种应试的复习才更适合我。
一、汇编基础
80x86计算机组织
Ⅰ.简介
本学期汇编的所有内容都是在以8086cpu为核心的pc上学习的。
80x86是什么?80x86是一个Intel从1978年开始推出的处理器系列,也就是跟我们现在用的Core酷睿i3 i5 i7系列类似的处理器系列。
这是个非常有趣的问题,多说两句。
处理器架构和指令集的区别是什么?为了下面的扩展—处理器架构指的是处理器的硬件架构,设计处理器架构从硬件电路的层面实现指令集的操作;而指令集指的是一堆二进制机器码,是最最底层的(从由硬件电路实现便可以看出)计算机指令。我们知道,高级语言(C/C++)→汇编语言(ASM)→机器语言(01),指令集对应的就是由高级语言/汇编语言翻译而成的语言。
一句话,指令集是设计CPU选择的最底层语言,处理器架构是CPU的硬件电路设计,是语言(指令集)的实现。
另外,要将汇编语言,处理器架构,指令集这三个层次的发展想象成三条时间线,从低到高来说—指令集的发展是最关键的,我所知道的有x86,基于RISC的ARM,还有现在i7用的SSE4.x;而处理器架构就变动很多,同一个系列的cpu,用着同样的指令集SSE4.x架构就不同,比如我的i7-7700使用的是Kaby Lake,而同系列i7-6700的六代cpu用的是Skylake架构,Kaby Lake即为Skylake的升级版;汇编语言是为了指令集助记诞生的,那么当然汇编的种类和指令集、架构息息相关,最容易区分的是汇编语言风格,Intel/AT&T。
以上是铺垫知识,网络上的很多博客和科普说法都很不严谨,如若我的表述有误望不吝指正。
最后正式谈到80x86,80x86是一个处理器系列,最开始Intel给cpu命名的时候,都起名为8086 80186 80286 80386 80486,因为起名都是80x86的形式,所以将系列就称为80x86,并且将系列所采用的指令集,称为x86,之后因为注册商标不能用数字,所以Intel才改叫Pentium(/pro/Ⅱ),Pentium一代其实就是80586,这八代cpu使用的都是x86指令集。
那个时候只有Intel给其他厂家授权才能使用x86指令集生产自己的cpu,直到后来,ARM基于不同于x86(CISC)的RISC做出自己的指令集,AMD(YES)也在1999年推出了自己的64位指令集,在Intel32位的x86基础上扩展出64位的x86-64,制造出他们历史上最成功的一系列cpu,而Intel也放弃了他们的 IA-64 ,转而使用AMD64(x86-64和IA-64的区别就在这), IA-32 (x86-32)自此成为过去式。
Ⅱ.寄存器组
Ⅲ.存储器
(联系段寄存器)
二、80x86的指令系统和寻址方式
1.80x86的寻址方式
一种是与数据有关的寻址方式,用来找到操作数;另一种是和转移地址有关的寻址方式,用来JMP和CALL进行程序流程控制。
(后面也要和前面来结合分析)
2.80x86的指令系统
总结一下所有的指令:在这里总结,然后分开分析寄存器等相关知识。
Ⅰ.数据传送指令
Ⅱ.算术指令
Ⅲ.逻辑指令
Ⅳ.串处理指令
Ⅴ.控制转移指令
Ⅵ.处理及控制与杂项操作指令
三、汇编语言程序格式和设计模式
1.伪指令
2.程序格式
3.分支和循环设计
4.子程序结构设计
5.宏汇编
四、中断
1.BIOS中断
2.DOS中断
3.两者交叉点
分别从键盘I/O,显示器I/O,打印机I/O,串行通信口I/O这四个方面再来共同理解两者的作用,主要是理解不是写出来。
五、汇编实践
转化原理:使用灰度值公式将像素的 RGB 值映射到灰度值:gray = 0.2126 r + 0.7152 g + 0.0722 * b。
之后会将视频和代码上传。
http://v2beach.cn:9000/file/bad%20apple/ (已失效)
上传到github的时候手贱discard changes把代码弄丢了一些,剩下的都放在这儿了。(天呐这可真是危言耸听)(怎么会有这么难过的事情)(这一定不是发生在中国)