地址

汇编

风流意气都作罢 提交于 2020-03-08 18:29:13
CPU有三条总线: 地址、数据、控制线 地址总线确定存储单元 控制总线发送指令 数据总线:传输数据 CPU N个地址线 地址总线宽度为N 可以寻找2^N个内存单元 *存储单元 0开始编号,一个存储单元可以存储一个Byte 8086CPU有16根地址线 1bit就是一根地址线 存储器以B为最小单位 ========================第二章 寄存器========================== 通用寄存器: AX BX CX DX AX ——> AH和AL 16位寄存器最大能存储的数 2^16 - 1 = 65536 - 1 转十六进制是四位 0~FFFFH 8 位寄存器 2^8 = 256 转十六进制 0~FFH 8086CPU在内部采用2个16位地址合成的方法来形成一个20位的物理地址 地址加法器: 物理地址 = 段地址 X 16 + 偏移地址 段地址 X 16 的说法是左移 4 位 一个X进制数左移1位,相当于乘以X 段地址 X 16 + 偏移地址 含义是: CPU 在访问内存时,用一个基础地址(段地址X16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。 起始、基础地址就是段地址 偏移地址16位,0~FFFFH, 64KB *课后题: (1) CPU寻址范围 (0001H+ 0000H x 16 ) ~ (0001H+FFFFH x 16 )

nor flash之4字节地址模式

本小妞迷上赌 提交于 2020-03-08 16:49:51
背景 容量低于 16M bytes 的 nor,一般使用 3 字节地址模式,即命令格式是 cmd + addr[2] + addr[1] + addr[0] + ... 使用超过 16M bytes 的 nor flash,则需要了解 4 字节地址模式, 即命令格式是 cmd + addr[3] + addr[2] + addr[1] + addr[0] + ... 原因 为什么呢, 因为用 3 个字节表示地址,则其范围是 0x000000 - 0xffffff = 0 - 16M ,超过 16M 的地址就无法表示了,那自然就得上 4 字节了。 驱动修改 新的 uboot, kernel 驱动中都是支持的,配置下就可以了,如配置上 SPI_NOR_4B_OPCODES 。 如果在用的 nor 驱动没有支持,那可以自行根据 datasheet,在初始化的时候判断下容量,加个切换到 4 字节地址模式的操作,后续的读写命令等,也改用 4 字节地址。 注意事项 需要注意的是,一些芯片的 boot rom 无法支持 4 字节地址模式,只会用 3 字节地址模式跟 nor 通信。 所以切换到 4 字节地址模式后会导致直接重启无法正常启动。需要彻底掉电后重新上电,让 nor 因为重新上电默认回到 3 字节地址模式,才能正常启动。 一种处理方式是,在 reboot 的流程中,增加软件退出 4

29、指针,及其运算(注意点)

。_饼干妹妹 提交于 2020-03-08 13:48:48
指针可以进行加法,减法,及比较大小的运算。 1、指针加、减一个整形表达式 pointer+/-n:是pointer地址值+/-n×sizeof(*pointer),即地址值实际增加或减少的字节数为n倍对象类型长度。 2、两个对象类型相同的指针进行减法运算 p-q=n:运算结果对象类型是一个整数,表示两个地址值相差的对象类型长度的倍数。 3、指针比较大小,就是比较地址值的高低。 4、首地址:当数据对象的存储长度超过一个字节时,系统自动使用第一个内存单元的地址来表示对象的存储地址,称为首地址。 5、指针常量:NULL,数组名,函数名 6、初始化: int a[4],*p; p=NULL; p=a+1; double (*f)(double)=sin; 7、安全使用指针: 用已有变量或数组元素作指针对象 用malloc和free分配和释放 void *malloc(n); free(void *p); 8、指针与数组在大多数情况下可以相互替换,但是并不等价。数组名对应起始地址,在生命周期内不可改变,但数组内容可以改变;而指针变量是一个变量。注意下面一个例子: #include "iostream" using namespace std; int main() { char* p1="world"; //指针指向常量字符串 p1[0]='X'; //p1指向常量,该语句试图修改常量

全国各地DNS

落花浮王杯 提交于 2020-03-08 13:23:24
全国各地电信DNS见下: 北京DNS地址:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195 上海DNS地址:202.96.199.132 202.96.199.133 202.96.209.5 202.96.209.6 202.96.209.133 天津DNS地址:202.99.96.68 10.10.64.68 广东DNS地址:202.96.128.143 202.96.128.68 202.96.128.110 深圳DNS地址:202.96.134.133 202.96.154.8 202.96.154.15 河南DNS地址:202.102.227.68 202.102.245.12 202.102.224.68 广西DNS地址:202.96.128.68 202.103.224.68 202.103.225.68 福建DNS地址:218.85.157.99 202.101.115.55 厦门DNS地址:202.101.103.55 202.101.103.54 湖南DNS地址:202.103.0.68 202.103.96.68 202.103.96.112 江苏DNS地址:202.102.15.162 202.102.29.3 202.102.3.141 202.102.24.35

子进程复制了父进程的什么

99封情书 提交于 2020-03-08 12:53:46
如果你对代码段、数据段、栈、堆存放哪些数据还不是很清楚,请先看我写和 Linux 内存管理 。 有时会出现父子进程变量的地址一样,但值不一样。看下面代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> main(){ char str[4]="asd"; pid_t pid=fork(); if(pid==0){ str[0]='b'; printf("子进程中str=%s\n",str); printf("子进程中str指向的首地址:%x\n",(unsigned int)str); } else{ sleep(1); printf("父进程中str=%s\n",str); printf("父进程中str指向的首地址:%x\n",(unsigned int)str); } } 输出: 子进程中str=bsd 子进程中str指向的首地址:bfc224dc 父进程中str=asd 父进程中str指向的首地址:bfc224dc 这里就涉及到物理地址和逻辑地址(或称虚拟地址)的概念。 从逻辑地址到物理地址的映射称为地址重定向。分为: 静态重定向--在程序装入主存时已经完成了逻辑地址到物理地址和变换,在程序执行期间不会再发生改变。 动态重定向--程序执行期间完成

12个Icon图标资源网站

此生再无相见时 提交于 2020-03-08 03:44:12
今天把自己收藏最好的12个Icon图标资源网站整理分享出来。 1.除了Icon以外,还有很多不错的UI设计素材。 地址: http://worldui.com/ 2.除了免费Icon资源下载以外,还提供Icon定制的付费服务。 地址: http://dryicons.com/ 3.很喜欢这个icon资源站的展示方式。 地址: http://www.icotrip.com/ 4.Icones.pro,icon资源站,每日推荐的Icon资源还不错,可以按照浏览数,下载数等查看Icon资源。 地址: http://icones.pro/ 5.IconPNG 共收录 21372 个 图标icons 和 416 个 icon 图标系列。 地址: http://www.iconpng.com/ 6.FindIcons.com就是一个帮您找免费图标的图标搜索引擎。有3000多套图片集和30多万个免费Icon资源。 地址: http://findicons.com/ 7.IconFinder是我个人最喜欢的一个Icon资源站,拥有152,466 icons以及775 icon集,强烈推荐! 地址: http://www.iconfinder.com/ 8.EasyIcon:拥有超过40万个Icon资源,完全收录Open Icon Library 11,489个图标。 地址: http://www

为什么有函数调用栈?

跟風遠走 提交于 2020-03-08 01:59:57
为什么引入栈 完成函数调用的过程,需要有个地方存放函数调用返回后要执行的指令地址(简称返回地址) 极客时间-深入计算机组成原理 函数调用过程中,栈的使用 A1 call B A3 B1 B2 retq rip寄存器: 存放下一条要执行的指令地址 callq指令做两件事 把rip的地址A3压栈(也就是被调用函数返回后,调用者本来接下来会执行的那条指令的地址) // 本来这个指令地址都被放在rip了,正常情况就要执行了,但是被call指令弄走了. 把被调用函数的第一条指令地址放入rip,使得cpu下一个就开始执行子函数。 retq指令做1件事 把栈的A3弹出,放入rip。使得cpu加下来继续执行A函数。 深入理解计算机系统-3.7 来源: https://www.cnblogs.com/yudidi/p/12439271.html

Linux虚拟内存相关知识

梦想与她 提交于 2020-03-07 14:15:36
Linux 的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。 Linux 虚拟地址空间如何分布? Linux 使用虚拟地址空间,大大增加了进程的寻址空间, 虚拟地址空间内由低地址到高地址分别为: 1、只读段:该部分空间只能读,不可写;(包括:代码段、rodata 段(C常量字符串和#define定义的常量) ) 2、数据段:保存全局变量、静态变量的空间; 3、堆 :就是平时所说的动态内存, malloc/new 大部分都来源于此。其中堆顶的位置可通过函数 brk 和 sbrk 进行动态调整。 4、文件映射区域:如动态库、共享内存等映射物理空间的内存,一般是 mmap 函数所分配的虚拟地址空间。 5、栈:用于维护函数调用的上下文空间,一般为 8M ,可通过 ulimit –s 查看。 6、内核虚拟空间:用户代码不可见的内存区域,由内核管理(页表就存放在内核虚拟空间)。 32 位系统有4G 的地址空间:: 其中 0x08048000~0xbfffffff

C++之指针、引用、数组、堆区栈区

此生再无相见时 提交于 2020-03-07 12:41:28
指针 指针(pointer)是一个值为内存地址的变量(或数据对象) 基本用法 数据类型 * 指针变量名 如 int * ptr_num 注意: Int* p 写法偏向地址 P是一个地址变量 表示一个十六进制地址 Int *p偏向值 *p是一个整型变量 能够表示一个整型值 给指针赋值只能使用&符号 空指针(null pointer)空指针不指向任何对象,在试图使用一个指针之前首先检查是否为空 Int *ptr1 = nullptr; 如果用null需要包含cstdlib Void 指针 一种特殊的指针类型 可以存放任意对象的地址 注意: void 指针存放一个内存地址,地址指向的内容是什么类1、型不能确定 2、Void 类型指针一般用来:拿来和别的指针比较,作为函数的输入和输出;赋值给另一个void 指针 指针小结: 指针同样是一个变量,只不过该变量中存储的是另一个对象的内存地址 如果一个变量存储另一个对象 的地址,则称该变量指向这个对象 指针变量可以赋值 指针的指向在程序执行中可以改变 指针P在执行中某时刻指向变量x在另一时刻可以指向y 注意: 指针命名规则和其他变量命名规则一样 指针不能与现有变量重名 应为指针指定一个地址后才能在语句中使用指针 引用 为对象起了另外一个名字(引用即别名) Int int_value = 1024; //refValue指向int_value

C/C++学习笔记——C基础:指针

对着背影说爱祢 提交于 2020-03-07 11:00:59
概述 内存 内存含义: 存储器:计算机的组成中,用来存储程序和数据,辅助CPU进行运算处理的重要部分。 内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。 外存:外部存储器,长时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、NOR)、硬盘、光盘。 内存是沟通CPU与硬盘的桥梁: 暂存放CPU中的运算数据 暂存与硬盘等外部存储器交换的数据 物理存储器和存储地址空间 有关内存的两个概念:物理存储器和存储地址空间。 物理存储器:实际存在的具体存储器芯片。 主板上装插的内存条 显示卡上的显示RAM芯片 各种适配卡上的RAM芯片和ROM芯片 存储地址空间:对存储器编码的范围。我们在软件上常说的内存是指这一层含义。 编码:对每个物理存储单元(一个字节)分配一个号码 寻址:可以根据分配的号码找到相应的存储单元,完成数据的读写 内存地址 将内存抽象成一个很大的一维字符数组。 编码就是对内存的每一个字节分配一个32位或64位的编号(与32位或者64位处理器相关)。 这个内存编号我们称之为内存地址。 内存中的每一个数据都会分配相应的地址: char:占一个字节分配一个地址 int: 占四个字节分配四个地址 float、struct、函数、数组等 指针和指针变量 内存区的每一个字节都有一个编号,这就是“地址”。