汇编3-寄存器

3.1内存中字的存储

任何两个地址连续的内存单元,N号和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。

3.2段地址寄存器
DS是段地址寄存器,里面存储的是16位的数据,代表当前段地址。
不能直接通过mov指令将数据存入DS中,mov ds,1000H这样写是错误的。只能先把1000H存入通用寄存器mov BX,1000H 然后 mov DS,BX。只能把另一个寄存器中的数据写入到DS中。
DS和CS的区别:DS保存的是数据段基地址,CS保存的是代码段基地址。而且除了跳转或其他分支指令之外,无法修改CS寄存器的内容。DS寄存器内容只能传送,不能运算。

3.3mov指令的对象还能是内存单元
mov AX,[0] 1000:0处的字型数据送入AX,是传入字型数据还是字节型数据取决于传入的寄存器,如果是AL或AH则传入的字节型数据。

3.4代码段
我们可以将一组长度为N(N<=64K)、地址连续、起始地址为16的倍数的内存单元当做专门存储数据的内存空间、从而定义一个数据段。
比如用 123B0H—123B9H这段空间来存放数据
段地址:123BH(找这个段地址中的内存单元要给DS赋值为123BH)
长度:10字节

3.5栈
8086cpu提供出栈和入栈的基本指令:
push(入栈)
pop(出栈)
push ax:将寄存器ax中的数据送入栈中
pop ax:从栈顶取出数据送入ax
8086cpu的入栈和出栈操作都是以字为单位进行的

段寄存器SS :存放栈顶的段地址
寄存器SP :存放栈顶的偏移地址
任意时刻,SS,SP指向栈顶元素

将10000H—1000FH这段空间当做栈的时候
SS=1000H,栈的空间大小为16字节,栈的最底部字单元地址为1000:000E。
任意时刻SS:SP指向栈顶元素,当占中只有一个元素的时候SS=1000H,SP=000EH(入栈是SP先-2,再入栈)。当栈为空时,占中没有元素,也不存在栈顶元素。此时SS:SP只能指向栈最底部单元下面的单元,该单元的偏移地址为栈最底部的子单元的偏移地址+2。栈最底部字单元地址为1000:000E,所以栈空时,SP==0010H。

我们将硬盘格式化的时候只是初始化了栈的指针,并没有真的把数据情况,所以是可以恢复的。这里执行了pop指令后,原来内存单元中的数据还是存在的。

3.6push和pop的格式
格式1:push寄存器:将一个寄存器的数据入栈
pop寄存器:用一个寄存器接受出栈的数据

格式2:push段寄存器:讲一个段寄存器中的数据入栈
pop段寄存器:用一个段寄存器接受出栈数据(只有jmp能操作cs,而且其他段寄存器不能用mov 段寄存器 ,数据 的形式赋值 cs寄存器只能由系统设置)

格式3:push内存单元 push[0]
pop内存单元 pop[0]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值