CS萌新的汇编学习之路(其实是老师作业呵呵哒)Learning of Assembly Language
第一节课学习汇编语言,做笔记,做笔记
1.概念
首先是汇编语言这门课程的定义以及对于学习高级语言、深入理解计算机系统的作用
机器语言 汇编语言 高级语言 关系
我们学习的主要是x86指令集
首先了解硬件结构,尤其是cpu和内存
汇编语言所写的程序效率极高,比高级语言高,比机器语言低
机器语言是机器指令的集合,一堆0和1的集合,没有必要学习
由指令生成相关的电平脉冲(CPU的工作原理)曾经使用纸带打孔,现在是CPU中石英振动正余弦
于机器语言一一对应
mov AX,BX 把寄存器BX内容移动到寄存器AX中
寄存器概念: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对外部器件的控制能力
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对系统中其他器件的控制能力
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萌新的汇编学习之路(其实是老师作业呵呵哒)Learning of Assembly Language的更多相关文章
- CS萌新的汇编学习之路02 Learning of Assembly Language
第二节课 寄存器 1. 寄存器的定义: 进行信息储存的器件,是CPU中程序员可以读写的部件,通过改变各种寄存器中的内容来实现对CPU的控制 2. 寄存器的种类: 本节课学习通用寄存器和段寄存器 2. ...
- 大数据萌新的Python学习之路(一)
笔记开始简介 从2018年9月份正式进入大学的时代,大数据和人工智能的崛起让我选择了计算机专业学习数据科学与大数据技术专业,接触的第一门语言就是C语言,后来因为同学推荐的原因进入了学校的人工智能研究协 ...
- 大数据萌新的Python学习之路(三)
笔记内容: 一.集合及其运算 在之列表中我们可以存储数据,并且对数据进行各种各样的操作.但是如果我们想要对数据进行去重时是十分麻烦的,需要使用循环,要建立新的列表,还要 进行对比,十分的麻烦,还消耗 ...
- 大数据萌新的Python学习之路(二)
笔记内容: 一.模块 Python越来越被广大程序员使用,越来越火爆的原因是因为Python有非常丰富和强大标准库和第三方库,几乎可以实现你所想要实现的任何功能,并且都有相应的Python库支持,比如 ...
- 萌新web前端从零开始(1)——计算机入门
前言:这是一个萌新从零开始的学习之路,与大家分享自己的看法与见解,还请指出错误与遗漏点方便改正. 1.认识计算机. 计算机语言常见的有C,PHP,Ruby,Java,C#,Basic,JS,C++等, ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- Qt 学习之路 2(16):深入 Qt5 信号槽新语法
Qt 学习之路 2(16):深入 Qt5 信号槽新语法 豆子 2012年9月19日 Qt 学习之路 2 53条评论 在前面的章节(信号槽和自定义信号槽)中,我们详细介绍了有关 Qt 5 的信号 ...
- STM32学习之路入门篇之指令集及cortex——m3的存储系统
STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码 操作数1, 操作数2,... ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
随机推荐
- Day-01
昨天学习的内容都是一些简单的入门知识 like:二进制,编程语言这些 我觉得二进制还蛮好玩的 对于ascii码 还好,我不是很陌生 因为学函数的时候,老师有讲到这些 嗯 昨天就这些 继续加油~~~
- TypeError: format string
先来看一段Python代码: class Negate: def __init__(self, val): self.val = -val def __repr__(self): return str ...
- python flask 如何修改默认端口号
场景:按照github文档上启动一个flask的app,默认是用5000端口,如果5000端口被占用,启动失败. 样例代码: from flask import Flask app = Flask(_ ...
- Oracle组成介绍
Oracle Database 11g是一些特殊文件的集合,这些文件是用数据库配置助手创建的,然后用OEM Grid Control完成相关工作.这些数据库文件是通过一组共享内存进程来进行访问的,这组 ...
- 如何在linux环境安装JDK
1. 到JDK官网下载相应的安装包 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht ...
- 微信小程序swiper 前后边距的使用
小程序中有一个组件swiper 就是滑块视图容器 其中提供了两个属性 previous-margin:前边距,可用于露出前一项的一小部分 next-margin:后边距,可用于露出后一项的 ...
- C#设计模式——单例模式的实现
1. 什么是单例 保证一个类只有一个实例的实现方法. 2. 使用场景 页面访问计数器 需要保持状态的工具类 需求很多,不能一一列举了 3. 实现方 非线程安全 /// <summary> ...
- mysql的sql执行计划
实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写 ...
- input()和print()函数同时输入输出多个数据--python3
使用input()和print()函数同时输入输出多个数据,需要空格分割输入信息 #!/usr/bin/python3#-*- conding:utf-8 -*- name, age, QQ = in ...
- springboot整合多数据源及事物
有两种方式:一种是分包的方式.一种是加注解的方式(@DataSource(ref="")). 分包方式:项目结构图如下: 分为com.itmayiedu.test01.com.it ...