How Program Works ?

对程序员来说CPU是什么?

CPU包括寄存器,控制器,运算器和时钟。对于程序员来说,只需要知道CPU是一堆寄存器即可。比较重要的寄存器是程序计数器,基址和变址寄存器,栈寄存器。通过设置程序计数器也就是跳转实现分支和循环。函数调用通过call指令和return指令,包括回到调用位置和函数堆栈销毁。通过基址和变址寄存器索引指定地址的数据。

二进制有符号数?

二进制:逢2进1. 科学记数法的2进制表示,位权和基数的概念。负数表示法->获取补数的方法:取反+1.因为正数和负数相加等于0,所以补数的概念方便计算机把减法当作加法计算,同时保证了逻辑的严谨性。所以8位可以表示的有符号数是,[-2^7, 2^7 -1].有符号数的取值范围是[0,2^8 -1]。负数比正数多一个,因为0算在了正数中,最大的负数是符号位为1,其余位均为0的位表示。左移在左侧补零。算数右移在右侧补符号位,逻辑右移在右侧补0.符号扩充,负数从8位扩展到16位,只需要在前面补符号位即可。所有位全是1的二进制有符号数永远是-1.

计算机表示IEEE浮点数?

二进制标识小数,位权成为2^-1,2^-2…和10进制无法表示1/3一样,二进制无法表示的小数更多,它们其实都是无限循环小数,在计算机有限位数表示时,会有误差。
浮点数包括符号位,尾数,指数和基数四部分组成,基数是2.double有64位,float有32位。分别是符号+指数+尾数 = 1+11+52,1+8+23.
尾数部分采用正则表达式,即按照特性的规则表示数据的形式,除了小数外,字符串和数据库都有自己的正则表达式。这里小数的正则指的是将小数点前面的值固定为1,这样就可以省出1位,提高精度。
指数部分采用EXCESS系统,表示将指数部分表示范围的中间值取为0,使得负数不需要符号位来表示。也就是说,8位指数部分,最大值11111111=255,255/2=127,所以127表示0,11位,11111111111=2047,2047/2=1023,即1023表示0.所以计算出指数部分的值,然后减去127或者1023就可以得到相应的指数部分的数值。

所以单精度浮点数的取值范围: 正数 [2^-23 * 2^-127, 2^128]=[1.4E-45,3.4E+38],负数[-3.4E+38,-1.4E-45]
双精度浮点数的取值范围:正数[2^-52 * 2^-1023, 2^1024]=[4.9E-324, 1.8E+308],负数[-1.8E+308,-4.9E-324]

为了规避浮点数的误差,可以转换为整数后再进行计算。

何为运行环境?

指的是操作系统加硬件,不同的CPU和操作系统需要不同的软件。具体而言,本地代码不同。Windows克服了除CPU之外的其他差别。不同操作系统API不同。

何为BIOS?

Basic Input/Output System,存储在ROM中,负责启动操作系统的程序。

通过汇编语言学习机器代码

汇编语言和本地代码时一一对应的,汇编语言的语法操作码加操作数,操作码也就是助记符,类似于mov,and,push,pop,cal,ret等等。

函数调用机制?

函数的参数通过堆栈来传递,返回值通过寄存器来返回。DATA和BSS段存储全局变量,一个初始化,一个未初始化。

IRQ?

Interrupt Request 中断申请,一般是硬件中断请求。

DMA?

Direct Memory Access,在不通过CPU的前提下,外围设备直接和主存进行数据传送。

文字和图片的显示机制,GPU?

VRAM,Vedio RAM,显示器显示的信息始终在VRAM中。

Reference

程序是怎样跑起来的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值