mrorangerabbit

导航

CS萌新的汇编学习之路(其实是老师作业呵呵哒)Learning of Assembly Language

第一节课学习汇编语言,做笔记,做笔记

1.概念

首先是汇编语言这门课程的定义以及对于学习高级语言、深入理解计算机系统的作用

软硬件接口
机器语言 汇编语言 高级语言 关系
机器语言和汇编语言可移植性差  
机器语言为二进制码,而汇编语言是对机器语言的集合、抽象,而高级语言是对汇编语言的抽象,故不考虑优化,而在效率上,机器语言最高,汇编其次,高级语言最低
我们学习的主要是x86指令集
 
2.学习过程笔记
首先了解硬件结构,尤其是cpu和内存
汇编语言所写的程序效率极高,比高级语言高,比机器语言低
机器语言是机器指令的集合,一堆0和1的集合,没有必要学习
由指令生成相关的电平脉冲(CPU的工作原理)曾经使用纸带打孔,现在是CPU中石英振动正余弦
于机器语言一一对应
mov AX,BX 把寄存器BX内容移动到寄存器AX中
 
3.知识点
寄存器概念:CPU中可以存储数据的器件,比高级缓存、二级缓存低一级,一个CPU中有多个寄存器
计算机能够读懂的只有机器指令
汇编语言的产生:程序员编写汇编指令,编译器翻译成机器语言给计算机执行
而高级语言则先翻译成汇编语言
Microsoft Visual C++中查看C语言代码反汇编成汇编语言
Build---Start Debug---Run to Cursor(Ctrl+F10)---点击Debug窗口中的翻译汇编按钮(放大镜标志)
每一行代码都会翻译成汇编语言
反编译软件:OllyDbg
反编译返回成汇编语言的结果,因为高级语言以汇编语言为基础,一条高级语言指令可能包含多条汇编指令,无法直接转换成某种高级语言的指令会产生错误
汇编语言组成:1.汇编指令(机器码的助记符)2.伪指令(由编译器执行)3.其他符号(由编译器识别)
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
存储器:指令和数据在存储器中存放
在PC机中内存的作用仅次于CPU
磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU使用
硬盘读取速度没有内存快,内存不够会在硬盘中划分虚拟内存
指令和数据:在内存和磁盘上,指令和数据没有任何区别,都是二进制信息
如 100100111011000读成16进制89D8H,H为HEX是16进制的意思
存储单元:存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号
从0开始顺序编号
存储器不一定内存!!!比如显存
对于大容量的存储器一般还采用以下单位来计量容量
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
然而存储设备厂商为了计算方便,一般将1024记成1000来算
磁盘的容量单位同内存一样
CPU对存储器的读写:必须和外部器件进行三类信息交互:1.储存单元的地址(地址信息)2.器件的选择、读写或写命令(控制信息)3.读或写的数据(数据信息)
包含了CPU于其他器件的所有基本操作
电子计算机能够处理、传输的信息都是电信号,电信号当然要用导线传输
总线:在计算机中专门由连接CPU和其他芯片的导线,通常称为总线
物理上是一根根导线的集合,逻辑上分为:1.地址总线 2.数据总线 3.控制总线,分别对应三类信息交互
指令和数据的区分,因为指令和数据都是二进制码,无法直接区分,在地址总线传输全当地址算,在数据总线传输全当数据算,在控制总线传输全当控制语句来计算
课本以8068处理器分析,各种CPU的内部架构都一样,继承器,通道等改变,但结构相同
CPU的运作原理:
1.地址总线: CPU是通过地址总线来指定储存单元的
地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址
系统位数和速度关系:比如64位CPU+64位操作系统+64位操作软件才能达到64位的效率,缺一不可
地址总线图的读法:上低下高,从高位往低位读
一个CPU有N根地址总线,则可以说这个CPU的地址总线宽度为N,这样的CPU最多可以寻找2的N次方个内存单元。
一根地址总线可以索引一个储存单元,就是一个字节,就是一个Byte即8个bit
数据总线:据总线的宽度决定了CPU和外界的数据传送速度
索引由低到高索引8088CPU数据总线一次传输8根线即一个字节,而8086为16根线即两个字节
数据总线宽度的扩大,二级缓存、寄存器的增加使得速度加快
控制总线:不同控制线的集合
有多少根控制总线,就意味着CPU提供了对外部件的多少种控制(1表示读 0表示写)
宽度决定了CPU对外部器件的控制能力
 
4。推荐书目:《编码的奥秘》(了解计算机系统)、《C陷阱和缺陷》(了解编程常产生的错误)

小结
1.汇编指令是机器指令的助记符,同机器指令一一对应
2.每一种CPU都有自己的汇编指令集
3.CPU可以直接使用的信息在存储器中存放
4.在存储器中指令和数据没有任何区别,都是二进制信息
5.存储单元从0开始顺序编号
6.一个存储单元可以存储8个bit,即八位二进制数
7.换算规则1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
8.每一个CPU芯片都有许多管脚,这些管脚和总线相连(引出总线)一个CPU可以以哦那个出三种总线的宽度决定了这个CPU不同方面的性能
地址总线宽度: 决定CPU的寻址能力
数据总线宽度:决定了CPU与其他器件进行数据传输的一次数据传送量
控制总线宽度:决定了CPU对系统中其他器件的控制能力
 
重点!!!
 
写检测点时发现了几个易错点(就是我自己写错的emm):
1.地址总线和数据总线的区别:
地址总线按照二进制数计算传输能力,N根地址总线,则可以说这个CPU的地址总线宽度为N,这样的CPU最多可以寻找2的N次方个内存单元
一根地址总线可以索引一个储存单元,就是一个字节,就是一个Byte即8个bit
例如题目中,1KB的储存器有1024个存储单元,可以储存1024*8个bit,1024个Byte,8088的地址总线宽度为20 根,寻址能力为(2^20/2^10)KB即1MB
寻址能力=2^(地址总线宽度次方)Byte
但是在数据总线中情况完全不同!!!
数据总线宽度仅仅以根数为运算能力标准,8根数据总线一次可传达一个8位二进制数据也就是一个字节;16根数据总线一次可以传送两个字节;也就是说,一次传送的字节数=(数据总线根数/8)Byte
例如,8088数据总线宽度位8根,一次可以传送1B的数据;8086数据总线宽度位16根,一次可以传送2B的数据;
如果从内存中读取1024字节的数据,8088要读1024次,而8086要读512次,数据总线宽度为32的803876要读256次。读取次数=(从内存中要读取的数据字节数)/(一次可以传送的数据字节数),小数补加1.
 
总之第一次写编程学习的博客,希望大家斧正我的不足,感激不尽!
CS学习永无止境,为自己打打气 (ง •̀_•́)ง!!!
 
 
 
 
 
 
 

 

posted on 2018-09-16 22:59  mrorangerabbit  阅读(571)  评论(0编辑  收藏  举报