第三章 寄存器知识总结

内存中字的存储

用16位寄存器来存储一个字,一个字要用两个地址连续的内存单元来存放(一个单元存放一个字节),⚠️其顺序是高-高,低-低,即小端法

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

n地址字单元:起始地址为n的字单元。

 

ds和【address】

ds:存放要访问数据的段地址。

mov指令的两种传送:

1.将数据直接送入寄存器(两个操作数要一样长

2.将一个寄存器的内容送入另一个寄存器

3.将一个内存单元中的内容送入一个寄存器中:mov 寄存器名,内存单元地址。(两个内存单元之间不能直接传送数据。

⚠️8086cpu不支持将数据直接送入段寄存器的操作。只好用一个寄存器进行中转。

 

mov,add,sub指令

⚠️在mov, add, sub等汇编指令中,访问内存单元时,默认情况下,指的是数据段

mov指令有如下三种形式:

(1)mov 寄存器,段寄存器

(2)mov 内存单元,段寄存器

(3)mov 段寄存器,内存单元

 

栈    (SS) × 16 + (SP)  → 栈顶的物理地址

栈是一种具有特殊的访问方式的储存空间。

特殊型:最后进入这个空间的数据,最先出去。后进先出

两个基本操作:

入栈:将一个新的元素放到栈顶。

出栈:从栈顶取一个元素。

 

cpu提供的栈机制

最基本的两个指令:(都是以为单位进行的;操作对象不能是常数

PUSH(入栈)

POP(出栈)

段寄存器ss,sp

ss:栈顶的段地址存放在其中

sp:偏移地址存放在其中

任何时刻ss:ip指向栈顶元素。cpu从ss,sp中得到栈顶的地址。

入栈(push)步骤:

(1)sp=sp-2,ss:sp指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶。

(2)将寄存器中的内容送入ss:sp指向的内存单元处,ss:sp指向新栈顶。

出栈(pop)步骤:ss:sp指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

(1)将ss:sp指向的内存单元处的数据送入ax中。

(2)sp=sp+2,

⚠️栈空时,ss:sp指向栈空间最高地址单元的下一个单元。

⚠️出栈的内存仍然存在,只是不在栈中。

 

栈顶超界的问题:

超出了栈空间,其他内存将被覆盖。8086cpu不保证我们对栈的操作不会超界。因此我们在编程的时候要自己操心栈顶超界的问题。

 

push,pop指令

格式:push:寄存器,段寄存器,内存单元(让数据入栈)。

pop :寄存器,段寄存器,内存单元(接收出栈的数据)。

⚠️不能直接向段寄存器ss中送入地址。

 

point

push和pop指令访问的内存单元的地址不是在指令中给出的,是由ss:sp指出的。

Push,pop等栈操作指令,修改的只是sp。栈顶的变化范围最大为0~ffffh。因此,一个栈段的最大容量为64kb

 

posted @ 2018-10-28 10:24  Jadeite  阅读(409)  评论(0编辑  收藏  举报