计算机组成原理太难了问题

王道论坛实习道友, 积分 15, 距离下一級还需 5 积分

王道论坛实习道友, 积分 15, 距离下一级还需 5 积分

数据结构难吧刚刚把组成看完了,又看数据结构简直是天书。。

王道论坛新噵友, 积分 0, 距离下一级还需 1 积分

王道论坛新道友, 积分 0, 距离下一级还需 1 积分

感觉组成比较容易,按唐的书来说,但是考试不是他出题啊??同是组成和白的书很不一样。感觉虽然白的我还没认真看,只是粗看了下唐的书总感觉不全,像什么TLB,虚拟存储,硬布線控制,什么概念内容都没提到过。不知你们发现美,过两天看白的,真是烦,数据结构我看到二叉树了,单就一本教材其实都挺容易,只要耐性看。。本人也是跨考。希望大家同交流共进步

王道论坛新道友, 积分 0, 距离下一级还需 1 积分

王道论坛新道友, 积汾 0, 距离下一级还需 1 积分

是啊唐的书上虚拟存储是没提到啊,但是10年大纲要求考的什么情况?
组原的课本不是推荐唐的书吗  求解····

王道论坛新道友, 积分 0, 距离下一级还需 1 积分

王道论坛新道友, 积分 0, 距离下一级还需 1 积分

我自己回答下吧,虚拟 和TLB那边操作系统讲的很详细所以唐那组成那里没怎么写,我也是学了都忘记了。哎。。。硬布线其实就是组合逻辑电路。大汗。白的书内容比较广,便于总体体系把握还是很大程度上推荐看!就这样

王道论坛初级道友, 积分 38, 距离下一级还需 162 积分

王道论坛初级道友, 积分 38, 距离下一级还需 162 积汾

被催啊~~这么多人跨考~~这么多人抢饭碗~~~~~本专业表示组成难度略大于数据结构,专业课就是知识点多白和唐的书结合下,结合变态的奶奶嘚题不懂得问问专业课老师,看看视频课本还是最主要的。

王道论坛新道友, 积分 0, 距离下一级还需 1 积分

王道论坛新道友, 积分 0, 距离下一级還需 1 积分

某种程度上来讲是这样的!数据结构讲究的是算法!!是一种比较严瑾的东西。。、
而唛成冤理史是乙抽象而著称!!!!拍怕?了夯少看了不少,
也很难建立一个完整的流程图!!!
不求甚解的感觉都简单啊!!!!

王道论坛实习道友, 积分 10, 距离下一级还需 10 积汾

王道论坛实习道友, 积分 10, 距离下一级还需 10 积分

数据结构前面有些难越到后面越简单,算法以前都学过前面要记得有些多~不管怎么说数據结构是考得基础~

我不怕千万人阻挡,只怕自己投降!!

王道论坛实习道友, 积分 10, 距离下一级还需 10 积分

王道论坛实习道友, 积分 10, 距离下一级还需 10 积汾

怎么看严大妈的教材与网上的题目,好多的存储结构都不一样啊
  尤其是她写的顺序表和顺顺栈,用的都是动态数组而别人为什么嘟是用的是静态数组?
海南师范大学2009专升本计算机科学與技术专业有多少人报名

计算机招生计划是50人。470人是三所大学的计划招生其中没有说计算机系多少人。 我朋友去年报了计算机的也昰海师,他说人不多毕竟计算机有高数,没什么人报名 你就安心吧。

海南师范大学_电气信息类_计算机科学与技术专业_专业介绍

回答提供机构: 本专业培养适应我国计算机教育事业的实际需求掌握计算机科学与技术的基本理论、基本知识、基本技能与方法,能熟练地进荇称许设计和使用数据库技术、网络技术以及多媒体技术,具有教书育人的良好素养能在各类中等专业学校从事计算机教育的教师和其他敎育工作者。

云南师范大学计算机科学与信息技术学院转专业,难不难

一、历史沿革1985年学校以省级重点学科“计算机科学理论”和“基础數学专业组合数学方向”硕士点为基础,申报并获准了“计算机科学与技术专业”(师范类)设在当时的物理系建设,同年开始招生1997姩7月,单独设置“计算机科学系”增设“计算机科学与技术专业”(非师范),在“计算机科学与技术专业”和“云南省计算机科学重點学科”的支撑下建成了“云南师范大学计算机软件与理论重点学科”。 “教育技术学”的前身“电化教育学专业”从1986年招收专科学生先后经历了在“电化教育系”和“信息传播系”办学阶段,1998年由“电化教育专业”更名为“教育技术学专业”1999年12月,由“计算机科学與技术系”、“信息传播系”合并组建成立计算机科学与信息技术学院 二、办学层次学院以普通全

河南师范大学新联学院郑州校区有哪些专业专业

本科:机械设计制造极其自动化,材料成型及控制工程工业设计,对外汉语计算机科学与技术,国际经济与贸易(贸易经濟方向)行政管理,学前教育日语,英语(英语翻译方向)汉语言文学(文秘方向),汉语言文学(新闻传播方向)心理学(人仂资源开发与测评方向),旅游管理(导游方向)旅游管理(景区管理方向),市场营销市场营销(电子商务方向)专科:工业设计,机械设计制造极其自动化商务英语,金融与证券学前教育,语文教育补充:这个是我按照今年的招生计划表打的绝对真实可靠哦~峩是新联学院09级的学生,嘿嘿

广外,深圳大学,华南师范的计算机科学与技术专业哪个好

楼主你好按照你的分数,建议楼主报考广外广外計算机新近与思科集团合作,毕业后相当比例直接在思科集团这个跨国公司工作就业前景明朗,同时由于合作的关系校方也加大了对信息学院也就是对计算机专业的关注,有发展前途加上广外的外语优势,楼主毕业后出路也比另外两所学校要多毕竟广外是省内唯一僦业情况能与中大比肩的学校。分数也正好合适楼主填报反观另外两所学校,深大的计算机不是王牌专业设备也不比大学城好多少,汾数上更是极大的浪费更重要的是深大的毕业证在广东满街跑,毕业生薪酬起点很低就业前景不好,因此不推荐华师计算机成立时間短,也没什么出名的部分加上华师本身的社会名声就不及广外,因此不推荐作为A志愿可以放在B志愿报考。楼上说的暨南楼主报考很懸再说暨南是华侨学校,校风欠佳社会声誉一般,不

南京师范大学泰州学院计算机科学与技术,师范,专业要学哪些科目

跟随 已跟随 取消 確定 大一 大二学的基础课 主要有高等数学、数字电路、模拟电路、公共课程(马列主义、历史什么的)、大学英语、计算机基础、C语言、JAVA、汇编语言等 大三这边就具体学习了有网络的课程、软件工程、网站的课程等等

洛阳师范 南阳师范 河南师范大学新联学院的美术学专业哪个更好

洛师南师一个档次的,洛阳城市好啊文化底蕴丰厚。河师大下属学院不行啊

安徽师范大学_电气信息类_计算机科学与技术专业_專业介绍

回答提供机构: 专业名称:计算机科学与技术 计算机科学与技术专业:本专业培养掌握计算机科学与技术,包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法熟练地进行程序设计和使用数据库技术、网络技术及多媒体技术等解决实际问题,具囿教书育人的良好素养能在高等和中等学校进行计算机教育的教师和其他教育工作者。主要课程有:高等数学、数据结构、操作系统、計算机组成原理太难了、高级语言程序设计、数据库原理、计算机通信与网络、多媒体技术、微机原理、接口技术等授予工学学士或理學学士学位。

杭州师范大学_电气信息类_计算机科学与技术专业_专业介绍

专业介绍本专业是浙江省高等教育首批省级重点专业相关学科计算机应用技术为校级重点学科。本专业师资力量雄厚教学成果丰硕,获得两项浙江省教育成果二等奖两门课程被评为省级精品课程。目前已投入上千万经费建有培养高水平计算机人才的专业实验室和学生创新开放实验室等。人才培养注重理论与实践创新能力并重的培養模式鼓励学生参加国家计算机软件专业资格与水平考试,通过率名列全省高校前茅多名同学曾名列浙江省高级程序员、程序员考试┅、二名,2004年参加的首届浙江省程序设计竞赛(ACM)中获省二、三等奖。 所学课程主要课程:高等数学、线性代数、离散数学、概率与统計、计算机科学导论、数据结构、数据库原理、C程序设计、C++程序设计、Java程序设计电子线路、计算机组成原理太难了、操作系统、编译原悝、汇编语言、计

江西师范大学_电气信息类_计算机科学与技术专业_专业介绍

计算机科学与技术四年离散数学、数据结构、高级语言程序设計、编译原理、操作系统、数据库原理、计算机网络与通信、计算机组成原理太难了、计算机系统结构、模拟电子线路、计算机系统结构、计算机科学导论等。掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法,熟练地进行程序設计和使用数据库技术、网络技术以及多媒体技术等解决实际问题,具有教书育人的良好素养能在高等和中等学校进行计算机教育的敎师和基础教育工作者。

《计算机组成的基本硬件设备》
《计算机组成原理太难了 — 冯诺依曼体系结构》
《计算机组成原理太难了 — 中央处理器》

指令系统决定了计算机的基本功能计算机的性能与它所设置的指令系统有很大的关系,而指令系统的设置又与机器的硬件结构密切相关指令系统的改进主要围绕缩小指令与高级语言嘚语义差异以及有利于操作系统的优化而进行的,例如:高级语言中经常用到的 if 语句、do 语句所以设置了功能较强的条件跳转指令;为了操作系统的实现和优化,设置了有控制系统状态的特权指令、管理多道程序和多处理机系统的专用指令

然后指令系统太过于复杂并不完铨是好事,在大多数场景中实际上只有算术逻辑运算、数据传输、跳转和程序调用等几十条指令会被频繁的使用到而需要大量硬件支持嘚大多数复杂的指令却并不常用,由此会造成硬件资源的浪费为了解决这个问题,指令系统被分为 精简指令系统计算机(RISC) 和 复杂指令系统计算机(CISC)

计算机指令集与程序指令

计算机指令集是 CPU 提供的可执行指令的集合;而程序所描述的指令是程序员希望在 CPU 上执行的指令,这些指令的范围不会超出计算机指令集的范围不同类型的 CPU 能够理解不同的 “语言”,即具有不同的计算机指令集(Instruction Set)同一个程序可鉯在相同型号的 CPU 中运行,反之则无法运行

CPU 运行一个计算机程序的本质就是运行这个程序所描述的指令,有如我们在 Linux 操作系统上执行指令┅般只是前者由 CPU 硬件支持。一个计算机程序通常由成千上万条指令组成CPU 显然不能存放所有的指令,而是将这些指令存放在存储器中呮有在运行时才会被 CPU 读取。又因为现代计算机被设计为可以运行多种程序存储器被各种各样的程序共享着,所以存储器也不会持久化的保存它们而是当我们要运行(启动)某个程序时,才会将其加载到存储器中最终再由 CPU 从存储器中逐一读取其指令。我们常见的内部存儲器多为 RAM(随机存储器)这是一种被设计成掉电就会自动重置的存储设备。

以上就是冯·诺依曼机的典型特性,所以又称之为 “存储程序計算机”冯·诺依曼体系结构解决了计算机实现领域的一个重要难题:如何能够动态加载程序指令。解决了这个问题,“计算器” 才得以成为 “计算机”,我们今天才得以在计算机上运行各种各样的应用程序

注:计算器的 “程序” 是焊死在主板上的。

计算机是通过执行指令来处理各种数据的为了了解数据的来源、操作结果的去向及所执行的操作类型,一条计算机指令一般包含以下信息

  1. 操作码:说明操作的性质和功能(e.g. 加减乘除、数据传输),长度有指令系统的指令条数决定(e.g. 256 条指令则操作码需要 8 位长度)。
  2. 操作数的地址:CPU 通过该哋址读取到所需要的操作数可能是存储器的地址,也可能是寄存器的地址
  3. 操作结果的储存地址:保存操作结果数据的地址。
  4. 下一条指囹的地址:当程序顺序执行时下一条指令的地址又程序计数器(PC)给出,仅当改变程序的执行顺序时(e.g. 跳转、函数调用)下一条指令嘚支持才会有指令本身给出。

综上指令格式主要有 操作码 和 地址码 组成。需要注意的是在指令字长较长的计算机中,操作码的长度一般是固定的并且由指令集的数量决定。但在指令字较短的计算机中为了能够充分利用指令字的位数,在有限的长度中实现更多的指令集数目所以其操作码长度被设计成是可变的,即把它们的操作码在必要的时候扩充到地址码字段这就是所谓的 指令操作码扩展技术。指令字的长度与 CPU 的位数密切相关

  • 算术类指令:加减乘除。
  • 数据传输类指令:变量赋值、读写内存数据
  • 条件分支类指令:条件判断语句。
  • 无条件跳转指令:方法、函数的调用跳转


继续细分的话,具有如下指令类型:

  • 矢量运算指令(矩阵运算)
    • 寄存器与主存储器单元传输
    • 存储器单元与存储器单元传输
    • 数据交换(源操作数与目的操作下互换)
  • 多处理机指令(在多处理器系统中保证共享数据的一致性等)

指令尋址即是根据指令字的地址码来获取到实际的数据,寻址的方式跟硬件关系密切不同的计算机有不同的寻址方式。有的计算机寻址方式种类少所以会直接在操作码上表示寻址方式;有些计算机的寻址方式种类多,就会在指令字中添加一个特别用于标记寻址方式的字段例如:假设该字段具有 3 位,那么就可以表示 8 种寻址方式

NOTE:寻址方式与 CPU 内的寄存器设计密切相关。

直接寻址:指令字的地址码直接给出叻操作数在存储器中的地址是最简单的寻址方式。

间接寻址:指令字的地址码所指向的寄存器或存储器的内容并不是真实的操作数而昰操作数的地址。间接寻址常用于跳转指令只要修改寄存器或存储器的地址就可以实现跳转到不同的操作数上。

相对寻址:把程序计数器(PC)的内容即当前执行指令的地址与地址码部分给出的偏移量(Disp)之和作为操作数的地址。这种寻址方式同样常用于跳转(转移)指囹当程序执行到本条指令后,跳转到 PC+Disp

立即数寻址:即地址码本身就是一个操作数的寻址方式,该方式的特点就是数据块(因为实际上沒有寻址)但操作数固定。常用于为某个寄存器或存储器单元赋初值或提供一个常数。

通用寄存器寻址:CPU 中大概会有几个到几十个通鼡寄存器用于临时储存操作数、操作数的地址或中间结果指令字的地址码可以指向这些寄存器。通用寄存器具有地址短存取速度快的特性,所以地址码指向通用寄存器的指令的长度也会更短节省存储空间,执行效率更快常被用于执行速度要求严格的指令中。

基址寄存器寻址:基址即基础地址,基址寄存器就是存放基址的寄存器可以是一个专用寄存器,也可以使用通用寄存器来充当基址寄存器執行指令时,需要将基址与指令字的地址码结合得到完成的地址此时的地址码充当着偏移量(位移量)的角色。当存储器容量较大时矗接寻址方式是无法存取到所有存储单元的,所以通常会采用 分段 或 分页 的内存管理方式此时,段或页的首地址就会存放于基址寄存器Φ而指令字的地址码就作为段或页的长度,这样只要修改基址寄存器的内容就可以访问到存储器的任意单元了这种寻址方式常被用于為程序或数据分配存储区,与虚拟地址实现密切相关基址寄存器寻址方式解决了程序在存储器中的定位存储单元和扩大 CPU 寻址空间的问题。

变址寄存器寻址:变址寄存器内的地址与指令字地址之和得到了实际的有效地址如果 CPU 中存在基址寄存器,那么就还得加上基址地址這种寻址方式常用于处理需要循环执行的程序,例如:循环处理数组此时变址寄存器所改变的就是数组的下标了。

堆栈寻址:堆栈是有若干个连续的存储器单元组成的先进后出(FILO)存储区堆栈是用于提供操作数和保存运算结果的主要存储区,同时还主要用于暂存中断和孓程序调用时的线程数据及返回地址

通过 MIPS 感受指令字的设计

MIPS(Millions of Instructions Per Second)是一种最简单的精简指令集架构,由 MIPS 科技公司设计MIPS 指令具有 32 位(最新蝂本为 64 位),高 6 位为操作码(OPCODE)描述了指令的操作类型。其余 26 位具有 3 种格式:R、I 和 J不同的指令类型和操作码组合能够完成多种功能实現,如下:

  • rs:代表第一个寄存器 s1 的地址是 17
  • rt:代表第二个寄存器 s2 的地址是 18
  • rd:代表目标临时寄存器 t0 的地址是 8
  • shamt:0表示不位移

最终加法算数指令 add $t0,$s2,$s1 嘚二进制机器码表示为 01 0(0X)。可以看见机器码中没有保存任何实际的程序数据,而是保存了程序数据的储存的地址这也算是存储程序計算机指令集设计的一大特点。

汇编语言是与机器语言最接近的高级编程语言(或称为中级编程语言)汇编语言基本上与机器语言对应,即汇编指令和计算机指令是相对匹配的虽然汇编语言具有与硬件的关系密切,占用内存小运行速度快等优点,但也具有可读性低、鈳重用性差开发效率低下等问题。高级语言的出现是为了解决这些问题让软件开发变得更加简单高效,易于协作但高级语言也存在洎己的缺陷,例如:难以编写直接操作硬件设备的程序等

所以为了权衡上述的问题,最终汇编语言被作为中间的状态保留了下来一些高级语言(e.g. C 语言)提供了与汇编语言之间的调用接口,汇编程序可作为高级语言的外部过程或函数利用堆栈在两者之间传递参数或参数嘚访问地址。两者的源程序通过编译或汇编生成目标文件(OBJ)之后再利用连接程序(linker)把它们连接成为可执行文件便可在计算机上运行了保留汇编语言还为程序员提供一种调优的手段,无论是 C 程序还是 Python 程序当我们要进行代码性能优化时,了解程序的汇编代码是一个不错嘚切入点

计算机指令是一种逻辑上的抽象设计,而机器码则是计算机指令的物理表现机器码(Machine Code),又称为机器语言本质是由 0 和 1 组成嘚数字序列。一条机器码就是一条计算机指令程序由指令组成,但让人类使用机器码来编写程序显然是不人道的所以逐步发展了对人類更加友好的高级编程语言。这里我们需要了解计算机是如何将高级编程语言编译为机器码的

Step 1. 编写高级语言程序。

Step 2. 编译(Compile)将高级语訁编译成汇编语言(ASM)程序。

Step 3. 使用 objdump 命令反汇编目标文件输出可阅读的二进制信息。下述左侧的一堆数字序列就是一条条机器码右侧 push、mov、add、pop 一类的就是汇编代码。

值得注意的是某些特殊的指令,比如跳转指令会主动修改 PC 的内容,此时下一条地址就不是从存储器中顺序加载的了而是到特定的位置加载指令内容。这就是 if…else 条件语句while/for 循环语句的底层支撑原理。

Step 1. 编写高级语言程序

Step 2. 编译(Compile),将高级语言編译成汇编语言

Step 3. 使用 objdump 命令反汇编目标文件,输出可阅读的二进制信息我们主要分析 if…else 语句。

首先进入条件判断汇编代码为 cmp 比较指令,比较数 1:DWORD PTR [rbp-0x4] 表示变量 r 是一个 32 位整数数据在寄存器 [rbp-0x4] 中;比较数 2:0x0 表示常量 0 的十六进制。比较的结果会存入到 条件码寄存器等待被其他指囹读取。当判断条件为 True 时ZF 设置为 1,反正设置为 0

条件码寄存器(Condition Code)是一种单个位寄存器,它们的值只能为 0 或者 1当有算术与逻辑操作发苼时,这些条件码寄存器当中的值就随之发生变化后续的指令通过检测这些条件码寄存器来执行条件分支指令。常用的条件码类型如下:

  • CF:进位标志寄存器最近的操作是最高位产生了进位。它可以记录无符号操作的溢出当溢出时会被设为 1。
  • ZF:零标志寄存器最近的操莋得出的结果为 0。当计算结果为 0 时将会被设为 1
  • SF:符号标志寄存器,最近的操作得到的结果为负数当计算结果为负数时会被设为 1。
  • OF:溢絀标志寄存器最近的操作导致一个补码溢出(正溢出或负溢出)。当计算结果导致了补码溢出时会被设为 1。

回到正题PC 继续自增,执荇下一条 jnp 指令jnp(jump if not equal)会查看 ZF 的内容,若为 0 则跳转到地址 42 <main+0x42>(42 表示汇编代码的行号)前文提到,当 CPU 执行跳转类指令时PC 就不再通过自增的方式来获得下一条指令的地址,而是直接被设置了 42 行对应的地址由此,CPU 会继续将 42 对应的指令读取到 IR 中并执行下去

42 行执行的是 mov 指令,表示將操作数 2:0x2 移入到 操作数 1:DWORD PTR [rbp-0x8] 中就是一个赋值语句的底层实现支撑。接下来 PC 恢复如常继续以自增的方式获取下一条指令的地址。


与普通嘚跳转程序(e.g. if…else、while/for)不同函数调用的特点在于具有回归(return)的特点,在调用的函数执行完之后会再次回到执行调用的 call 指令的位置继续往下执行。能够实现这个效果完全依赖堆栈(Stack)存储区的特性。 首先我们需要了解几个概念

  • 堆栈(Stack):是有若干个连续的存储器单元組成的先进后出(FILO)存储区,用于提供操作数、保存运算结果、暂存中断和子程序调用时的线程数据及返回地址通过执行堆栈的 Push(压栈)和 Pop(出栈)操作可以将指定的数据在堆栈中放入和取出。堆栈具有栈顶和栈底之分栈顶的地址最低,而栈底的地址最高堆栈的 FILO 的特性非常适用于函数调用的场景:父函数调用子函数,父函数在前子函数在后;返回时,子函数先返回父函数后返回。

  • 栈帧(Stack Frame):是堆棧中的逻辑空间每次函数调用都会在堆栈中生成一个栈帧,对应着一个未运行完的函数从逻辑上讲,栈帧就是一个函数执行的环境保存了函数的参数、函数的局部变量以及函数执行完后返回到哪里的返回地址等等。栈帧的本质是两个指针寄存器: EBP(基址指针又称帧指针)和 ESP(栈指针)。其中 EBP 指向帧底而 ESP 指向栈顶。当程序运行时ESP 是可以移动的,大多数信息的访问都通过移动 ESP 来完成而 EBP 会一直处于幀低。EBP ~ ESP 之间的地址空间就是当前执行函数的地址空间。

NOTE:EBP 指向当前位于系统栈最上边一个栈帧的底部而不是指向系统栈的底部。严格說来“栈帧底部” 和 “系统栈底部” 不是同一个概念,而 ESP 所指的栈帧顶部和系统栈顶部是同一个位置


简单概括一下函数调用的堆栈行為,ESP 随着当前函数的压栈和出栈会不断的移动但由于 EBP 的存在,所以当前执行函数栈帧的边界是始终清晰的当一个当前的子函数调用完荿之后,EBP 就会跳到父函数栈帧的底部而 ESP 也会随其自然的来到父函数栈帧的头部。所以理解函数调用堆栈的运作原理,主要要掌握 EBP 和 ESP 的動向下面以一个例子来说明。

NOTE:我们习惯将将父函数(调用函数的函数)称为 “调用者(Caller)”将子函数(被调用的函数)称为 “被调鼡者(Callee)”。

  • 使用gcc编译然后gdb反汇编main函数,看看它是如何调用add函数的

我要回帖

更多关于 计算机组成原理太难了 的文章

 

随机推荐