汇编2/段寄存器

  1. 8086CPU有20根地址线,最大可寻址内存空间为1MB。 而8086的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段(保证0000H ~ FFFFH 能将整个段寻遍) 也就是把1MB空间分为24,即16个段,每段不超过64KB(216,16位数据线就可以寻址)。

  2. 在8086中设置4个16位的段寄存器,用于管理4种段:CS是代码段,DS是数据段,SS是堆栈段,ES是附加段。把内存分段后,每一个段就有一个段基址,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址在8086中设置4个16位的段寄存器,用于管理4种段:CS是代码段,DS是数据段,SS是堆栈段,ES是附加段。把内存分段后,每一个段就有一个段基址,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址

  3. 段寄存器CS指向存放程序的内存段IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。

  4. 段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。

  5. 段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。
    通常,缺省的数据段寄存器是DS,只有一个例外,即:在进行串操作时,其目的地址的段寄存器规定为ES。当然,在一般指令中,我们还可以通过改变前缀中的“段取代”字段来改变操作数的段寄存器。

段寄存器中存储地址,通过段基地址,和偏移量。得到物理地址,再去内存中根据得到的地址找到相应的数据储器分段只是为了好寻址,是人为的将符合的地址分为一段,存储器中也有对应的数据段,代码段,堆栈段,附加段(存储的是对应的数据),段寄存器中的数据段,代码段,堆栈段,附加段,存储的是相应的段基地址和部分的偏移量

  • 堆栈段 SS 偏移量SP 或者是BP(堆栈中数据的偏移量)
  • 代码段CS 偏移量IP
  • 数据段DS  偏移量:具体的数值,符号地址,指针寄存器(BP SP)
  • 附加段 ES 偏移量:直接的数值,指针寄存器

寻址的方法一共有七种。
关于存储器寻址:指令中,通常给出的是存储单元地址或产生存储单元地址的有关信息。执行指令时,需要首先计算出数据存放的有效地址,接着计算出其在存储器中的物理地址,然后访问存储器,读取数据,再执行指令规定的基本操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值