image.png
    一、内存中字的存储:
    image.png
    字在内存中存储时,需要用两个连续地址的内存单元来存放,字的低位字节存放在低地址单元,字的高位字节存放在高地址单元中
    在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器对应,低地址单元和低8位寄存器对应

    二、DS和[address]:
    mov指令的三种传送功能:
    ①、将数据直接送入寄存器
    mov ax,f3
    ②、将一个寄存器的内容送入另一个寄存器中
    mov ax,bx
    ③、将一个内存单元中的内容送入一个寄存器
    mov ax,[0]
    注:8086CPU不支持将数据直接送入段寄存器的操作,只能将数据送入通用寄存器,再将通用寄存器的数据送入段寄存器。但通用寄存器可以

    三、mov、add、sub、jmp指令:
    mov 寄存器,数据
    mov 寄存器,寄存器
    mov 寄存器,内存单元
    mov 内存单元,寄存器
    mov 段寄存器,寄存器

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

    sub 寄存器,数据
    sub 寄存器,寄存器
    sub 寄存器,内存单元
    sub 内存单元,寄存器
    mov、add、sub是具有两个操作对象的指令,jmp具有一个操作对象的指令

    四、数据段:
    在8086CPU中,根据需求将一组内存单元用来存放数据,此组内存单元就是数据段,同理,还有代码段

    五、栈:
    1、说明:
    ①、栈是一种具有特殊的访问方式的寄存空间,特殊之处:后进入这个空间的数据,先出去
    ②、栈的两种基本操作:入栈和出栈
    入栈:将一个新的元素放到栈顶
    出栈:从栈顶取出一个元素
    2、8086CPU中,入栈、出栈指令:
    PUSH(入栈)
    POP(出栈)
    例:push ax:将寄存器ax中的数据送入栈
    pop ax:从栈顶取出数据送入ax
    注:8086CPU的入栈和出栈操作都是以字为单位进行的

    3、8086CPU判断栈顶单元:
    在CPU的内部,段寄存器SS,用于存放栈顶的段地址,寄存器SP,用于存放栈顶的偏移地址,任意时刻,SS、SP指向栈顶元素
    4、执行push和pop时的详细过程:
    ①、执行push时的过程:push ax
    a、SP = SP - 2
    b、将ax中的内容送入SS、SP指向的内存单元处,SS、SP此时指向新栈顶
    ②、执行pop时的过程:pop ax
    a、将SS、SP指向的内存单元处的数据送入ax中
    b、SP = SP + 2,SS、SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶
    5、栈顶越界问题:
    说明:
    当栈满的时候再使用push指令入栈,当栈空的时候再使用pop指令,都将发生栈顶越界问题。我们知道将一段空间安排为栈,那么在栈空间之外的空间很可能存放别的数据代码,那么这些数据代码将可能被覆盖/送出。因此,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的越界。

    六、push、pop指令:
    push和pop指令时可以在寄存器和内存之间传送数据的
    1、push指令:
    push 寄存器:将一个寄存器中的数据入栈
    2、pop指令:
    pop 寄存器:出栈,将一个寄存器接手出栈的数据
    注:数据的段地址从ds中获得,代码的段地址从cs中获得,栈的段地址从ss中获得

    七、栈段:
    我们可以将长度为N(N≤64K)的一组连续起始地址为16的倍数的内存单元,当作栈来用,从而定义了一个栈段