【汇编】三、寄存器(内存访问)

0x03 寄存器(内存访问)

3.1 内存中字的存储

  • 字单元,即存放一个字(16位)的内存地址,由两个连续的内存单元组成。
    • 高地址内存单元存放字的高字节,低地址内存单元存放字的低字节。

3.2 DS和[address]

  • 8086CPU有个DS寄存器,用来存放要访问数据的段地址
  • mov有三种作用
    • 数据直送寄存器;
    • 将寄存器的内容送入另一个寄存器;
    • 内存单元和寄存器之间相互传输。
  • [address]表示一个内存单元,其中address表示内存单元的偏移地址
    • 段地址由CPU自动取DS中的内容
  • 8086CPU不支持数据直送段寄存器
    • 需要用通用寄存器做中转

3.3 字的传送

  • 8086CPU是16位结构,一次性可以传送16位的数据。
    • 在mov指令中给出给出16位寄存器就可以传送16位数据了。

3.4 mov、add、sub指令

  • mov的五个主要形式
mov 寄存器, 数据;
mov 寄存器, 寄存器;
mov 寄存器,  内存单元;
mov 内存单元, 寄存器;
mov 段寄存器, 寄存器;

3.5 数据段

  • 逻辑上可以把连续存放数据的内存空间看作数据段
    • DS存放数据段的段地址,具体单元通过**[address]**给出。

3.6 栈

  • 栈有两个基本操作:
    • 入栈:将新元素放到栈顶。
    • 出栈:从栈顶弹出一个元素。

3.7 CPU提供的栈机制

  • 8086CPU提供push和pop指令栈的方式访问内存空间。
    • push ax表示将ax中的数据送入栈中;
    • pox ax表示从栈顶中取出数据送入ax;
    • 入栈出栈操作都是以字为单位
  • 8086CPU中有两个寄存器
    • 段寄存器SS:存放栈顶的段地址;
    • 寄存器SP:存放偏移地址;
    • SS:SP始终指向栈顶元素

由于SS:SP始终指向栈顶元素,栈空时,SS:SP只能指向栈底单元下面的单元

  • push ax的步骤
    • SP=SP-2,即以前面的字单元作为新的栈顶
    • 将ax的值送入SS:SP此时指向的内存单元。

  • pop ax的步骤
    • SS:SP指向内存单元的字送入ax中;
    • SP=SP-2,即以当前栈顶下面的字单元作为新栈顶

3.8 栈顶越界的问题

  • SS和SP只记录了栈顶的地址
    • 故8086CPU不保证程序员对栈的操作不会越界

栈顶越界是危险的!

3.9 push、pop指令

  • push和pop支持的形式。

    • push/pop 寄存器
    • push/pop 段寄存器
    • push/pop 内存单元
  • 由于push、pop仅修改SP,故栈顶变化范围是[0, FFFFH]

3.10 栈段

  • 起始地址为16倍数、连续的内存单元当作栈空间使用,从而定义了栈段
    • 这只是编程时的安排,CPU并不知道。
  • 若栈空间大小为64KB,即最大情况下,栈空时SP=0

Debug的T命令在修改SS的指令执行后,下一条指令也紧接着被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值