3.1 内存中字存储

字单元, 一个16位
4e20 4e在高位, 20在低位
在寄存器中也是
image.png

3.2 DS和[address]

cpu读取内存中数据到通用寄存器AL, 无法直接读取地址需要通过
读取地址到通用寄存器->到段寄存器->通过偏移量读取到通用寄存器
8086cpu设计就是这样

  1. mov bx,1000H;直接传送数据到通用寄存器
  2. mov ds,bx
  3. mov al,[0];传送内存中数据到通用寄存器

3.3 字的传送

mov命令给出16位寄存器的时候,就可以传输16位数据了

  1. mov bx,1000H
  2. mov ds,bx
  3. mov ax,[0];传输数据为16
  4. mov [0],cx;16位数据存到1000:0

3.4 mov, add, sub指令

  1. cs:代码段寄存器,与ip配合使用
  2. ds:数据段寄存器,与ip配合使用
  3. ss:栈段寄存器,与sp配合使用
  4. es:扩展段寄存器

    3.4.1 寄存器<-段寄存器

    image.png

    3.4.2 内存单元<-寄存器

    mov 内存单元,寄存器
    1. mov ax,1000H
    2. mov ds,ax
    3. mov [0],cs

    3.4.3 段寄存器<-内存单元

    mov 段寄存器,内存单元
    1. mov ax,1000H
    2. mov ds,ax
    3. mov ds.[0];偏移地址也是地址,也是一个字节

    3.5 数据段

    DS为数据段,和IP配合使用, 或者偏移地址使用

    3.6 cpu提供的栈机制

    ss:sp指向栈顶元素, 来控制哪里是栈, 哪里是栈顶, 栈顶是从高地址向低地址方向增长
    push ax
    image.png
    image.png
    pop ax
    image.png
    image.png

    3.7 栈顶超界的问题

    8086cpu不会保证栈的超界, 我们只知道栈顶在哪里, 编程的时候需要注意栈的大小, 避免超界

    3.8 push和pop

    这两个指令只是一种特殊的访问内存和寄存器传递数据的方式