读王爽老师汇编语言笔记---寄存器(内存访问)

2013-6-22 10:22:23


cpu中用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节,在内存中存储时,由于内

存单元是字节单元(一个单元存放一个字节),则一个字要用2个地址连续的存储单元来存放。

字单元概念:即存放一个字型数据(16位)的存放单元,由两个地址连续的内存单元组成。高地址内存单

元存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节

我们将起始地址为N的字单元简称为N地址字单元,比如:
一个字单元由2,3两个内存单元组成,则这个字单元的起始地址为2,我们可以说这是2地址字单元

8086cpu中有一个DS寄存器,通常用来存放要访问的数据的段地址。
且8086cpu不支持将数据直接送入段寄存器的操作,所以将数据直接写入ds寄存器中是非法的操作,只有


通过另外一个寄存器来作中转,至于为什么不能直接将数据写入段寄存器中,这属于8086cpu硬件设计的


问题。


用mov指令在寄存器和内存之间进行字节型数据的传送。因为8086cpu是16位结构,有16根数据线,所以


每次传送16位的数据,也就是说可以一次性完成一个字。


关于add mov sub 指令
mov运算 几种形式
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元, 寄存器
mov 段寄存器, 寄存器

add
add 寄存器,数据
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器

sub
sub 寄存器,数据
sub 寄存器,寄存器
sub 寄存器,内存单元
sub 内存单元, 寄存器

数据段
我们将一组长度为N(N < 64K,因为偏移地址最多为16位)、地址连续其实地址为16的倍数的内存单元当作


专门存储数据的内存空间,从而定义了一个数据段


cpu提供的栈机制

cpu要执行当前命令所在的位置,是根据CS IP中存放的段地址和偏移地址的信息来执行的,对于栈的地

址,同理在8086cpu中,有两个寄存器,段寄存器SS和寄存器sp,栈顶的段地址存放在SS中,偏移地址存

放在SP中,任意时刻,SS:SP指向栈顶元素,当执行PUSH和POP指令时,cpu从SS和SP中得到栈顶的地址,

由于SS和SP寄存器只是记录了栈顶的地址,依靠SS和SP只能保证入栈和出栈的时候能够准确的找到栈顶


的位置,80866cpu不能保证我们队栈的操作是否越界问题,所以只有通过自己来防止栈的越界问题


PUSH命令的操作:① SP = SP-2 ②向ss:sp指向的字单元中送入数据
POP 指令的操作:① 从SS:SP指向的字单元中读取数据,② SP = SP+2
且任意时刻SS:SP都是指向栈顶元素,8086cpu只记录栈顶,栈空间大小由我们自己管理分配


对于栈段

我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内单元。(我们自己假想安
排,cpu工作并非如此)

对于数据段,将它的段地址存放在DS中,用mov, add, sub,等访问内存单元的指令时,cpu就将我们

定义的数据段中的内容当作数据来访问。


对于代码段,将它的段地址存放在CS中,将段中第一天指令的偏移地址存放在IP中,这样cpu执行我们定
义的代码段中的指令


杜宇栈段,将它的段地址放在SS中,将栈顶单元的偏移地址存放在SP中,这样cpu就在需要进行栈操作的
时候,就将我们定义的栈段当作栈空间来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

max_min_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值