
计算机原理
文章平均质量分 71
djh624
这个作者很懒,什么都没留下…
展开
-
冯·诺伊曼模型
计算机运行有两个前提:任务描述(以程序或代码方式表述)和计算机本身的运行能力(任务的执行者)程序是计算机指令的集合,每条指令就是一个计算机的基本动作,指令是程序的最小单位(原子操作),即要么都执行,要么都不执行,不可能只执行一部分。计算机就是通过一条条的执行指令来完成工作任务的。冯·诺依曼模型包括五个部分:内存,处理单元,控制单元, 输入,输出 内存单元包括MAR(Memory...原创 2018-08-09 17:51:50 · 11971 阅读 · 0 评论 -
测试与调试
通常来讲,开发过程中程序员在测试和调试阶段花费的时间远比编写代码的时间更长。不会调试的程序不是好程序!!!测试的目的是暴露错误,调试的目的是发现错误发生的原因并修复解决。测试分为白盒和黑盒,黑盒测试其实就是测试功能的完整性,是不是符合需求,并不关心内部实现,即编写的测试用例和实现代码内部完全独立。因为黑盒无法获知内部代码实现情况,所以代码本身可能存在的问题对黑盒而言也是未知的,这种情况...原创 2018-08-21 18:07:20 · 5479 阅读 · 0 评论 -
函数的底层实现
函数是什么,怎么用这个就不多说了,基础中的基础,大家都知道。说一说函数的底层实现原理。C语言中,函数调用包括三个步骤:1.调用,调用者将参数传递给被调用者,并交出控制权。2.执行,被调用者执行任务。3.被调用者返回结果,并将控制权交还给调用者。调用机制实现中,函数必须是“调用者无关的”,因为一个函数可能被不同的调用者调用。 运行时栈首先,函数执行之前,必须在内存...原创 2018-08-20 16:58:16 · 1922 阅读 · 0 评论 -
变量、运算符、控制结构
变量和运算符没什么好说的,非常基础的东西,接触过代码的都知道,不多说了,需要注意的可能就是变量命名规则,不同的数据类型占用的内存空间情况以及变量的作用空间(全局和局部)和在不同的作用空间中变量的初始化情况,运算符需要注意的就是优先级了,就像平常的算术运算* / 高于+ -一样。局部变量默认初始值不确定,因为为局部变量分配的内存可能曾经被使用过并且没有被特意清除,所以可能包含的是之前使用的内容。...原创 2018-08-20 10:30:04 · 330 阅读 · 0 评论 -
c语言系统概论
高级语言相较于低级语言:汇编语言相较于ISA指令(机器码)而言可读性更好。但是这还是不够,因为相较于现实语言的自然表达而言还是太过于抽象了。高级语言的作用就体现出来了。对数值的符号命名(变量的定义)高级语言不用像汇编一样需要手工分配相应的内存地址,并注意不同类型的数据处理,而高级语言只需简单的分配一个名字及类型(变量名和变量的数据类型)即可,剩余的工作都由编译器自动完成(分配合适的地址...原创 2018-08-17 17:12:37 · 1007 阅读 · 0 评论 -
数据结构
结构体:将多个基本类型聚合在一起(也包括指针和数组),形成一个新的自定义类型,这就是结构体。//一个描述飞机航班的结构体struct flightType{ char flightNum[7]; int altitude; int longitude; int latitude; int heading; double airs...原创 2018-08-22 18:12:09 · 264 阅读 · 0 评论 -
C语言 递归、IO
递归的本质:将大任务拆成处理逻辑完全相同的子任务,不断缩小处理范围,直至结束。 即递归函数调用自身,完成更小的子任务。注意,递归也需要有明确的结束条件,即处理完不能再次拆解的子任务后停止。能使用递归的程序一般都能通过使用循环来解决,但是在合适的情况下递归有更好的可读性,但是也可能导致性能开销的变大(递归需要进行大量的函数调用),所以并不存在谁能替代谁,而是在合适的时机选择合适的方式来处理,这就...原创 2018-08-22 17:13:16 · 182 阅读 · 0 评论 -
栈
总算开始栈了。栈是一种数据结构,它具有这样的访问性质,后进入的先取走,即后进先出(LIFO)。栈的内存实现:由一段连续的内存空间和一个寄存器指针(栈指针)组成。栈指针的内容是一个地址值,始终指向栈的顶部(即最后进入的元素)。压入栈的元素在内存空间都占据一个独立的位置,但是在做出栈和入栈操作时,栈中的其他数据不需要移动,只需要移动栈指针即可。看图说话顺序压入18、31、5、12,然后...原创 2018-08-16 10:31:06 · 344 阅读 · 0 评论 -
输入输出I/O
可以通过TRAP指令请求操作系统完成输入输出,输入(0x3002),输出(0x3010)设备寄存器:跟一个I/O设备进行交互,需要用到多个设备寄存器(device register),即使最简单的也需要两个,一个用来跟计算机之间传输的数据(设备数据寄存器),一个用来指示设备当前的状态,如设备是否空闲、最近处理的I/O任务等(设备状态寄存器)。内存映射I/O和专用I/O指令指令访问I...原创 2018-08-13 18:01:24 · 1405 阅读 · 0 评论 -
逻辑电路
计算机由非常多的简单逻辑单元组成, 即包含着千万以上个MOS晶体管。本篇主要介绍MOS晶体管的工作原理和基于MOS晶体管实现逻辑门,以及逻辑门组合构建计算机的组成单元。MOS晶体管我们知道电路中电子的流动是通过开关来控制的,为了电子流动,电路中的各个单元需要形成回路,而通过开关的开闭来影响电路的闭合和断开,MOS晶体管就是这个开关。 分为n型和p型MOS。n型MOS示意...原创 2018-08-08 19:52:05 · 6378 阅读 · 0 评论 -
0和1
庞大的计算机系统本质就是由0和1构成的。计算机内部由数以百万计的器件控制着电路的工作,而电路本身只有两个状态,0无电压,1有电压,为了表示更多的数值状态,我们把多个电路组合并起来使用,这样就有了N条线路表示N个bit位。这样就可以表示2的N次方个不同的状态。计算机的数据类型也是通过这种二进制的方式来表达的。 无符号整数,有符号整数和补码 N个bit位...原创 2018-08-07 16:10:05 · 1523 阅读 · 0 评论 -
TRAP程序和子程序
LC-3 TRAP程序由于像硬件I/O操作过于底层,如果直接让用户程序员去自己处理,有两个问题,1门槛过高,如程序要从键盘读取输入,则需要了解详细的硬件底层I/O操作。2如果赋予用户程序员硬件寄存器的读写权限,会造成很多复杂问题,硬件的设备寄存器通常由很多程序共享,如果出现误操作,则会影响其他用户程序的正常执行。所以设备寄存器是有权限的,只能被具有合适权限的程序访问。为了解决这个问题,我们...原创 2018-08-14 16:13:27 · 1711 阅读 · 0 评论 -
计算机原理初探
最经典的一句话:不要在脑子里对软件和硬件做区分。这也是计算机概论中两个重要理念之一,在设计硬件时如果我们具备软件相关的知识,那肯定能做出更好的设计,只有懂得需要,才能对症下药。软件设计也是一样的,如果能懂得硬件的运行机制,设计实现的程序肯定会比不懂的更有效率。另外一个就是抽象。对应抽象的理解个人认为就是要把有限的精力用在事情的本质上,而不要过于注重底层细节,这将大大提高我们的工作效率。...原创 2018-08-06 19:03:05 · 304 阅读 · 0 评论 -
编程和汇编语言
编程分为两个部分:编写程序和修补程序(俗称改bug),通常而言,修补工作所花费的时间和精力远大于编写。结构化编程:将问题系统的分解为多个独立的、足够小的模块,这些小模块可以被独立的开发,运行和测试。这种机制又称为系统分解,即将一个大任务分解为多个子任务集合。大问题划分为小问题贯穿了整个编程的过程,拥有良好的问题拆分的编程思维是设计高效的算法和实现优秀的程序的必要条件。三种结构:...原创 2018-08-10 18:23:46 · 2270 阅读 · 0 评论 -
LC-3结构
ISA定义了软件编程所需要的必要而完整的描述。ISA给出了内存组织方式,寄存器组,指令集(包括操作码,数据类型,寻址模式)等信息。LC-3的数据处理是16位的,所以对于LC-3来说,16位为一个字,LC-3也可称为一个“字寻址”机器。寄存器从内存中获取数据的速度很慢(通常远不止一个周期),所以,LC-3也提供了临时存储空间,访问速度为一个周期。实现方式为寄存器,LC-3提供了一...原创 2018-08-10 11:26:56 · 12610 阅读 · 0 评论 -
开篇
不知不觉,已当码狗7年。项目经验越来越多,知识体系越来越复杂,可是近两年越发觉得进步缓慢,最近停下来理了理整个7年,蓦然回首,才发现根源在于对计算机的了解如此浅薄。计算机工作原理,操作系统,编译原理,高级语言的底层设计。既然发现了,那就重新出发吧。 ...原创 2018-08-06 11:04:28 · 166 阅读 · 0 评论 -
指针和数组
指针是内存对象的简单地址,用指针,可以间接的访问这些对象(知道内存单元的地址,当然就能够访问到内存单元了)。简单的把数据作为参数传入函数,函数即使修改参数的内容也不会对调用者中的数据产生影响(看了之前的函数底层实现,应该很容易的知道这是为什么),而使用指针,使得函数可以修改调用者传递进来的参数(传递的是地址,可以通过地址访问到对应的内存对象,接着就可以对其做修改了)数组就是内存中一组用来存...原创 2018-08-21 19:19:33 · 174 阅读 · 0 评论