(H是16进制),为要容量,以7FFF要加1等于8000H然后再转换成2进制,等于 1000000000000000(1位16进转4位2进)最后是1^16=64K,完全抄袭,给好评。
硬盘是主机里独立的很大一块,像一个小本子似的,在主板旁边,由几根数据线与主板相连,内存是由内存条决定,内存条是插在主板上面的的,是一个小长薄片条!
内存的基本单位是字节(BYTE).每个字节是8个二进制位,所以每个字节能表示的最大的数是11111111,即十进制的255.一般来说,用十六进制比较方便,因为每4个二进制位刚好等于1个十六进制位,11111111b=0xFF.内存中的字节是连续存放的,两个字节构成一个字(WORD),两个字构成一个双字(DWORD)。在INTEL架构中,采用smallendian格式,即在内存中,高位字节在低位字节后面.举例说明:十六进制数803E7D0C,每两位是一个字节,在内存中的形式是:0C7D3E80.在32位寄存器中则是正常形式,如在EAX就是803E7D0C.当我们的形式地址指向这个数的时候,实际上是指向第一个字节,即0C.我们可以指定访问长度是字节,字或者双字.假设DS:[EDX]指向第一个字节0C:movAL,byteptrDS:[EDX];把字节0C存入ALmovAX,wordptrDS:[EDX];把字7D0C存入AXmovEAX,dwordptrDS:[EDX];把双字803E7D0C存入EAX在段的属性中,有一个就是缺省访问宽度.如果缺省访问宽度为双字(在32位系统中经常如此),那么要进行字节或字的访问,就必须用byte/word。0x开头的表明0x0001和0x0002都是16进制的数字,他们之间的差距是0x0002-0x0001=1bit。单位是bit哦!
7000H-3001H+1=4000H=16K字节H 是16进制 16跟地址线可以寻址2^16B,也就是64KB内存空间地址段为3001H~7000H,(H是十六进制,相当于4个二进制位,一字节是8个),可以表示4000/2=2000字节。
内存地址 系统 ram 中的特定位置,通常以十六进制的数字表示。
在8086的实模式下,把某一段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(或叫虚地址)。
C语言中,要使用sizeof()不需要包含头文件,因为sizeof实际是C语言的一种单目运算符,也是关键字之一,可以直接使用。在C语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符,简单的说其作用就是返回一个对象或者类型所占的内存字节数。sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。sizeof对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。一般的,在32位编译环境中,sizeof(int)的取值为4。扩展资料:sizeof与strlen区别:
1、strlen(char*)函数求的是字符串的实际长度,直到遇到第一个'\0',然后就返回计数值,且不包括'\0'。而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。
2、数组做sizeof的参数不退化,传递给strlen就退化为指针了。
3、sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
打个比喻:内存,段号,偏移量,存储单元的内容-》学校,班级,学号,具体的学生。
通过班级和学号就可以找到对应的学生,内存的访问也类似,通过段号和段内偏移量访问对应的存储单元。段可以理解为一片连续的内存空间块,开始处指的是这片空间的第一个字节。对于一个16位的偏移量,它的取值范围是0--65535(2的16次方减去1),所以偏移量可以是1。你可能混淆了概念,仔细的想一下学校,班级,学号,学生;这种关系就跟内存,段号,偏移量,存储单元的内容一样。下面介绍一下相关虚拟地址(Relative Virtual Addresses) PE格式文件中经常用到RVA,即相关虚拟地址,用在不知道基地址的情况下表示一个内存 地址。它需要加上基地址才能得到线性地址(Linear address)。例如:假设一个可执行程序调入内存0x400000处并且程序从RVA 0x1560处开始执行。那 么正确的开始地址是0x401560。如果可执行程序调入0x100000处,则开始地址为0x101560。因为PE文件的每一个段不必按同样的边界对齐方式调入,因此RVA地址的计算变得比较复 杂。例如,在文件中每一个段往往按512个字节的方式对齐,而在内存中可能以4096字节的方 式对齐。这方面的介绍可见下面的“SectionAlignment”、“FileAlignment”。举个例子, 假设你知道一个程序从RVA 0x1560开始执行,你想从那儿反汇编它。你发现内存中的段对齐方 式为4096并且.code段开始于内存RVA 0x1560并且有16384字节长;那么你可以知道RVA 0x156 0在这个段的0x560处。你又发现这个段在文件中以512字节方式对齐并且.code开始于文件0x8 00处,那现在你知道了可执行程序开始于0x800+0x560 = 0xd60处。当使用80386时,我们必须区分以下三种不同的地址: 逻辑地址: 机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。这种寻址方式在Intel的分段结构中表现得尤为具体,它使得MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。 线性地址: 线性地址是一个32位的无符号整数,可以表达高达232(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。 物理地址: 也就是内存单元的实际地址,用于芯片级内存单元寻址。物理地址也由32位无符号整数表示。 MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,在本书中,我们把它们分别叫做分段机制和分页机制,以利于从逻辑的角度来理解硬件的实现机制。分段机制把一个逻辑地址转换为线性地址;接着,分页机制把一个线性地址转换为物理地址。
可以这么认为,认真说起来还包括寄存器,某些设备端口号等,它也与存储单元共用一个地址
内存地址的概念在windows里面不是特别明显(由windows内存管理api直接管理),普通用户比较难精确知道某个应用的内存地址,也没有必要
存储器中最小的存储单位就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元,它可存储一个二进制代码。由若干个存储元组成一个存储单元,然后再由许多存储单元组成一个存储器。一个存储器包含许多存储单元,每个存储单元可存放一个字节(按字节编址)。每个存储单元的位置都有一个编号,即地址,一般用十六进制表示。一个存储器中所有存储单元可存放数据的总和称为它的存储容量。
假设一个存储器的地址码由20位二进制数(即5位十六进制数)组成,则可表示2的20次方,即1M个存储单元地址。每个存储单元存放一个字节,则该存储器的存储容量为1MB。