首页 内存寻址和分段机制 汇编语言入门

内存寻址和分段机制 汇编语言入门

举报
开通vip

内存寻址和分段机制 汇编语言入门内存寻址和分段机制 汇编语言入门 内存寻址和分段机制 汇编语言入门 内存寻址和分段机制--汇编语言入门2010-04-06 20:13一、什么是指针内存,如果安装编程的眼光看的话,就是一连续的存储空间,这里,最小的存储空间是位(这个概念不用解释吧),但是,位实在是太小了,所以,内存空间被分为1字节1字节的,也就是把1字节作为一个单位。如果我们把内存空间比作一条街的话,这每一个单位就是一个楼。可是,我如何知道我需要的是哪个楼呢?我们知道,要找某一号楼的话,一般说这是XX街64号楼,这叫地址。内存中每个单位也有一个...

内存寻址和分段机制  汇编语言入门
内存寻址和分段机制 汇编语言入门 内存寻址和分段机制 汇编语言入门 内存寻址和分段机制--汇编语言入门2010-04-06 20:13一、什么是指针内存,如果安装编程的眼光看的话,就是一连续的存储空间,这里,最小的存储空间是位(这个概念不用解释吧),但是,位实在是太小了,所以,内存空间被分为1字节1字节的,也就是把1字节作为一个单位。如果我们把内存空间比作一条街的话,这每一个单位就是一个楼。可是,我如何知道我需要的是哪个楼呢?我们知道,要找某一号楼的话,一般说这是XX街64号楼,这叫地址。内存中每个单位也有一个地址,叫内存地址。内存地址是从0开始计数的。内存中第一个字节的内存地址是0x0000(这是十六进制)什么是十六进制,我就不再说明了。第二个字节的内存地址是0x0001。存储这些内存地址的寄存器就叫指针寄存器,指针,就是指着这一个内存单元的"针",说白了就是一个内存地址。二、什么是分段机制我们知道,16位的PC机上,内存寻址最远的是0xFFFF(1111111111111111),这是靠单一十六位寻址的最大范围了。但这实际上并不大,才能寻址到64KB的地方,这实在是太小了。(怎么算的64KB)使用Windows自带的计算器,调整到科学型,选择[十六进制],输入FFFF,然后加1,因为内存地址是从0算起的,得出的就是寻址的最远处,这时的数是10000, 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示最远到0x10000字节处,不够直观,必须除以400(十六进制的),(我们知道,KB到B的换算是1024,十六进制的表示就是400)得到40(还是十六进制的),再选择十进制,就是64,也就是64KB。确实太小了,怎么办呢?于是引入了段的概念,一个内存地址就由"段基址:段内偏移地址"表示。段基址,就是这个段的起始地址;段内偏移地址,就是距段基址的距离。这样,段内偏移地址最大是0xFFFF,所以,一个段的最大长度是64KB。那怎么把这个内存地址换算成最基本的内存地址呢?规则是这样的:实际内存地址=段基址×0x10+段内偏移地址我们看一看,段基址最大是0xFFFF,段内偏移地址最大是0xFFFF,所以有:0xFFFF×0x10+0xFFFF=0xFFFF0+0xFFFF=0x10FFEF大约是1M,这可比64KB大多了。那么,一个内存地址就有两种表示 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 了:0:0x1000=0x100:0也就是说,段基址是0x0,段内偏移地址是0x1000,和段基址是0x100,段内偏移地址是0x0所指向的内存地址相同,不信你算一算。你也许就知道了,CS/DS/ES/SS段寄存器存储的就是段基址。那么我们就可以用DS:0x0002得到数据段中偏移地址为0x0002的数据。这四个段寄存器是各有分工的。在取指令 时,自动把CS×0x10+IP得出要取的指令。在进行堆栈操作时,自动把SS×0x10+SP得到栈顶指针。在进行普通数据操作时,自动把DS或ES乘以0x10+相应的偏移地址。所以,正常情况下,段基址可以省略。三、"高高低低"原则16位是2个字节,是1个字。一个字在内存中占用2个字节。规定:一个字存放到内存中时,低字节存放在地址较低的字节单元中,高字节存放在地址较高的字节单元中。所以,0x1234存储中看起来像0x3412。考考你:0x 12345678在内存中是怎么存储的?四、内存寻址既然要学习内存寻址,最好先了解一个最基本最常用的指令:mov目的操作数,源操作数这个指令就是把源操作数挪到目的操作数中。1、立即寻址立即寻址就是操作数就在指令中,是指令的一部分,存放在代码段中,这个操作数叫做立即数。立即数可以是8位的也可以是16位的。但是,16位的立即数要按照"高高低低"原则存储,即高位存放在高地址处,低位存放在低地址处。例如指令:mov ax,1234h意思就是把0x1234挪到ax寄 、寄存器寻址操作数就在存器中。十六进制0x1234在指令中表示为1234h。2 CPU的寄存器中,指令中指定寄存器号。对于16位操作数,寄存器可以使ax,bx,cx,dx,si,di,sp和bp,对于8位操作数,寄存器可以使用ah,al,bh,bl,ch,cl,dh,dl。例如,指令"mov bx,ax"和指令"mov ch,dl"中的源操作数和目的操作数都是寄存器寻址。由于操作数在寄存器中,不需要访问存储器,所以这种寻址方法的指令执行速度较快。3、直接寻址操作数在内存中,指令直接包含操作数的有效地址。操作数一般存放在数据段中,所以操作数的地址由DS加上指令中的16位段内偏移地址得到。如果要访问其他的段中的数据,就要采用段超越前缀,即指定基地址寄存器不是DS的其他寄存器(CS,ES,SS),所以操作数可以不在数据段。假设,DS的内容是0x1000,在段内偏移地址为0x1234的字存储单元中的内容是0x6789,那么执行指令"mov ax,[1234h]"把ds段内的段偏移地址为0x1234中的字单元中的数据存放在ax中。这里的""表示里面的数据是偏移地址。下面的指令中的目的操作数采用了直接寻址,并使用了段超越前缀:mov[es:1234h],al它可以在整个64k段中寻找操作数。直接寻址的操作数通常是程序使用的变量。直接寻址的地址要放在方括号中。在源程序中,往往使用变量名表示。4、寄存器间接寻址操作数在内存中,操作数有效地址在si,di,bx,bp这四个寄存器之一中。一般情况下(即不使用段超越前缀),如果有效地址在si,di,bx中,则使用ds段寄存器中的数据为段基址;如果有效地址在bp中,则使用ss段寄存器、例如:mov ax,[bx]因为操作数在bx中,默认使用ds段寄存器。假设ds中的数据是0x1000,bx 中的数据是0x1234,那么实际物理地址就是0x11234,假设这个字存储单元中的数据是0x5678,则执行指令之后,ax中的数据为0x5678。使用段超越前缀:mov dh,es:[si]这里,使用的段寄存器不再是ds,而是es。使用段寄存器ss:mov[bp],cx注意:寄存器名一定要放在方括号中。mov[si],ax;目的操作数寄存器间接寻址mov si,ax;目的操作数立即寻址(看看前面的)5、寄存器相对寻址这种寻址就稍微有点复杂。操作数在内存中,操作数的有效地址是一个基址寄存器(bx,bp)或变址寄存器(si,di)的内容加上指令中给定的8位或16位的位移量(就是偏移量)之和。还是同样的道理,si,di,bx引用ds段寄存器,bp引用ss段寄存器。比较难懂啊,举个例子就明白了:mov ax,[si+1234h]假设ds为0x1000,si为0x1111,则实际物理地址为0x1000× 0x10+0x1111+0x1234=0x12345,如果0x12345中存储的字数据为0xffff,那么 6、基址加变址寻址操作数还是在内存中,操作数执行指令后ax中为0xffff。 的有效地址是由基址寄存器之一的内容加变址寄存器之一的内容相加得到的。这好像不用说明了吧。还是同样的道理,si,di,bx引用ds段寄存器,bp引用ss段寄存器。这句话都说烦了。例子:mov ax,[bx+di]假设: ds=0x1000,bx=0x1234,di=0x12那么实际物理地址为0x11246,假设字数据为0x115,那么执行后,ax中的数据为0x115。下面两种方法是等价的:mov ax,[bx+di]mov ax,[bx][di]7、相对基址加变址寻址这个称呼真别扭,听着就吓唬人。事实上,一点儿也难。就是在基址加变址寻址的基础上加上位移量。有点像寄存器相对寻址,不信往前看看。引用什么段寄存器我就不用说了(如果你还不知道…)举例:mov ax,[bx+di-2]假设: ds=0x1111,bx=0x1234,di=0x4214那么实际物理地址为0x16556,假设字数据为0x8847,那么执行后ax为0x8847。尽管相对基址加变址寻址最复杂,却是最灵活的。下面四个表示方法均是等价的:mov ax,[bx+di+1234h]mov ax,1234h[bx+di]mov ax,1234h[bx][di]mov ax,1234h[di][bx]如果你留心的话,会发现bp指针寄存器引用的段寄存器始终默认是ss段寄存器。ss段寄存器就是堆栈段寄存器。什么是堆栈段呢?等待…
本文档为【内存寻址和分段机制 汇编语言入门】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_601191
暂无简介~
格式:doc
大小:16KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-19
浏览量:18