您的位置:首页 > 其它

《汇编语言》王爽版重点摘要-----第三章

2014-01-12 16:50 176 查看
第三章寄存器(内存访问)

3.1 内存中字的存储

CPU中,用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节。

一个字要用两个地址连续的内存单元来存放。低位字节存放在低地址单元(不是低8位)中,高位字节存放在高地址单元中。

字单元:存放一个字型数据的内存单元。由两个连续的内存单元组成。

起始地址为N的字单元简称N地址字单元。起始地址为低地址单元。

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

3.2 DS和[address]

CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址。

DS寄存器用来存放要访问数据的段地址。

mov的三种传送:(1)将数据直接送入寄存器

                               (2)将寄存器中的内容送入寄存器-------用寄存器名指明

                               (3)将一个内存单元中的内容送入寄存器-------用内存单元的地址指明

 

[]中的数值用来表示内存单元的偏移地址。

指令执行时,CPU自动取DS中的数据为内存单元的段地址。

8086CPU不支持将数据直接送入段寄存器。只能用一个寄存器来进行中转。

3.3 字的传送

8086CPU可以一次性传送16位数据,也就是说可以一次性传送一个字。

在mov指令中给出16位的寄存器就可以进行16位数据的传送。

3.4 mov、add、sub指令

mov可以进行的指令:

mov 寄存器,数据

mov 寄存器,寄存器

mov 寄存器,内存单元

mov 内存单元,寄存器

mov 段寄存器,寄存器

mov 寄存器,段寄存器

mov 内存地址,段寄存器

mov 段寄存器,内存地址

数据能传输就说明硬件之间存在这方向的通路。

3.5 数据段

访问数据段中的内容:用ds存放数据段的段地址,用偏移地址访问数据段中的具体单元。

3.6 栈

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

栈的两个基本操作:入栈和出栈。

LIFO(LAST IN FIRST OUT)

3.7 CPU提供的栈机制

所有CPU都提供了栈的设计。

8086CPU提供相关的指令来以栈的方式访问内存空间。

入栈的指令:PUSH  

push ax表示把ax中的数据送入栈中

出栈的指令:POP    

pop ax表示从栈顶取出栈顶元素送入ax中

8086CPU的入栈和出栈都是以字为单位进行的。

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

入栈时,栈顶从高地址向低地址方向增长。

当栈为空时,SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2。(最后偏移地址+1)

3.8 栈顶超界的问题

当栈满的时候使用push,栈空的时候使用pop都会发生栈顶超界。

8086CPU不会保证我们对栈的操作不会超界。

过度push的后果:栈顶指针指向正常栈顶-2的内存并覆盖栈外数据。

过度pop的后果:栈顶指针指向正常栈顶+2的内存,如果这时push并不会入栈而是覆盖指针此时所指的内存地址中的数据。

3.9 push、pop指令

push和pop指令格式:

push/pop 寄存器

push/pop 段寄存器

push/pop 内存地址   段地址从ds中获得

寄存器清零的两个方法:sub自减(占两个字节的机器码),mov赋值(占3个字节的机器码)

用栈来暂存以后需要恢复的寄存器中的内容时,出栈的顺序要和入栈的顺序相反。

不使用mov内存单元,寄存器指令向某一内存单元写入数据的方法:栈

执行push的时候:sp先自减然后再送入数据,注意顺序。

执行pop的时候:CPU先读取SS:SP处的数据,后改变SP。

push/pop的操作只修改SP,所以栈顶的变化范围最大为:0-FFFFH

8086提供的栈操作机制:SS、SP指示栈顶,改变SP后写内存的入栈指令,读内存后改变SP的出栈指令。

3.10 栈段

将一段内存空间当作栈来用,以栈的方式访问,这段空间就可以称为一个栈段。

访问栈段的方法:将SS:SP指向定义的栈段(SS:SP为段尾地址+1)

一个栈段的容量最大为64KB。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 汇编语言