您的位置:首页 > 理论基础

第一篇博客--程序是如何跑起来的

2017-02-25 06:55 232 查看
计算机现在早已普及,并且通过不同的方式越来越多的融入人们的生活中。自然而然,程序开发也成为当下炙手可热的一门手艺。
也许就是抱着这样的一种好奇心态,我就踏上了计算机编程从入门到--?的不归路。
所谓知其然也要知其所以然,今天就谈谈自己看了《程序是怎样跑起来的》,《编码》之后的读后感。

计算机的组成:

按照事情的发展顺序,计算机最初是被发明用来进行科学计算的,因此计算才是其主要功能。
为了让它知道要算什么,我们得有一个输入设备,然后有一个可以放数据的存储器,再然后从输出设备这儿得到结果。
当然在这中间有一步最关键的没有讲,那就是计算的环节,我们用计算机当然不是为了进行简单的运算,
因此运算过程中可能存在不同的状态,比如某个指标大于上限就要执行方案B,因此核心的计算单元CPU是由运算器和控制器组成的。

程序的运行:
当然上述都是冯诺依曼抽象出来的概念,实际的实现要负责得多。要梳理程序运行的过程,还是用Java的Hello World来举个例子吧。
众所周知,Java是一门面向对象的高级语言。所谓高级语言,也就是易于人们理解,但是计算机不懂的语言了。
为了要让计算机明白,我们要它做什么,当我们在IDE中编写好Hello World代码点击运行的时候,一系列的事情就发生了。
首先, 我们的java文件被编译成为了class字节码,由于不同平台的执行环境不同,有了字节码就可以达到“一次编译,随处运行”的效果。
然后,字节码在java的虚拟机JVM上运行,通过操作系统对电脑的硬件设备进行操作,

一些实际的问题:
上述还是程序层面的一些流程,但是对于计算机来说,还是不能明白。说到底计算机就是由电子元件组成的。
通过电路的通路和闭路来表示数字0和1,再用0和1的不同组合方式来表示数字和符号,不同电路的组合来又能实现逻辑的运算。
正是由于有了大量的约定和规则再结合电路的特性,只用简单的数字0,1就能形成一套机器能懂的语言。

不同的电子元件成本,构造以及功能大不相同,价格成本与运行速度,储存容量成正比。因此就需要运用一些手段进行流程的优化。
例如利用局部性原则创建中间层,异步以及并发执行等等。

最后是一些简要的读书笔记:
计算机最小单位bit代表一个二进制
基本单位8位二进制,bite->byte

二进制
转十进制:各个位数权重相加
负数表示:各位取反加1,又名补数
左移1位表示乘以2:空位用0填充
右移1位表示除以2:空位用符号位数字填充

逻辑异或XOR:
当2个数值不同时为1,其他为0

浮点数就是把小数用
符号 尾数 x 基数的指数次幂 表示
2进制基数为2

DLL: Dynamic Link Liabrary
可由多个程序共享的函数集合文件,可以节约内存使用。

汇编语言:
eax,ebx,ecx,edx
ebp,esp,esi,edi都为寄存器
寄存器有存储和计算功能,e表示extend扩展非16位

mov ebp,esp
把esp的值赋给ebp
mov eax,dword ptr [ebp+8]
dword ptr = double word pointer 修饰语表示从内存地址读出4字节
方括号内表示内存地址,即把ebp+8内存地址的4字节数据赋给eax

stack堆表示堆起来的东西
即初始地址大,往上变小
push,pop一次处理4字节数据
esp寄存器管理堆的内存地址,运行后自动更新push-4,pop+4

定义全局变量int a1=1
_a1 label dword

dd 1
dd = define double word

mov A,B 把B的值赋给A
add A,B

for循环i次实现:
xor ebx,ebx (申请ebx寄存器作为计数器,并清零)
@4 call _MySub (执行_MySub,@4为Goto标记)
inc ebx (ebx+1)
cmp ebx,10 (compare比较指令,ebx数值与10比较)
jl short @4 (如果小于10,则跳转到@4标记)
jl = jump on less than
jge = jump on greater or equal
jmp 无条件跳转

IO操作:
DMA: Direct Memory Access不经过CPU直接与主内存进行数据传输
输入输出设备中有IO控制器,可以通过内部的寄存器临时储存要传输的数据
不同设备通过端口号区分,也成为I/O地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算机基础