汇编语言第三章总结

第三章 内存访问

(1) 字数据在内存中的存放、内存单元地址

字数据的存-取原则:高-高 低-低

即: ① 字数据的低位字节存放在低地址内存单元; 字数据的高位字节存放在高地址内存单元;

        ② 取低地址内存单元地址作为字数据地址

 

(2) 数据在内存和cpu之间的传送

mov ax, 1000H

mov ds, ax; ds  ← 1000H

mov al, [0]; al  ← (ds: 0)

mov bl, [1]; bl ← (ds: 1)

mov cx, [1]; cx ← (ds: 1)

执行指令时,默认情况下,8086自动取寄存器DS中的值为内存单元的段地址。

 

(3) 「段」的概念,数据段、代码段、栈段的意义所指

1.「段」是一个逻辑上的概念。 编程时,可根据需要指定一段内存区用作数据段、代码段或是栈段。

2.用作数据段时,要把段地址→DS 用作栈段时,要把段地址→SS,栈顶偏移地址 → SP 用作代码段时,段地址→CS,要取的指令偏移地址→IP。但CS和IP的值不能使用mov改变。

3.一段内存可以同时用作代码段、数据段、栈段。 由编程时灵活确定。

4.在8086CPU中,每个段的最大长度不能超过64KB。 (因为寄存器是16位的,能表示的地址范围只能是0000H~FFFFH,即0~216-1)

 

(4) 「栈」的机制;与栈操作相关的寄存器SS和SP;与「栈」操作相关的指令push和pop

「栈」是一个逻辑上的概念。可以将一段内存空间当作「栈」来使用。

栈的特性: 后进先出

两个概念: 栈底、栈顶

两个操作: 入栈、出栈

一个约定: 8086中栈以字为存取单位

栈顶: 最后入栈的字数据所对应的地址单元

栈底: 固定的一端,栈区最高地址单元的前一个单元

入栈: 把数据存入栈

出栈: 从栈取出数据

SS: 栈段段寄存器,用于存放栈段的「段地址」

SP: 栈指针寄存器,用于存放栈顶的偏移地址。

SS:SP对应的物理地址是栈顶的物理地址。

在push  内存单元和pop 内存单元中,指令中只需给出「偏移地址」。默认,段地址在DS中。

对8086CPU而言,push和pop的操作: 入栈和出栈均以字为单元

                                                            操作对象不能是常数

                                                            pop 段寄存器中,段寄存器不能是CS和SS

以下两种情形会发生「栈顶超界」问题: 当栈满的时候,再使用push指令入栈;

                                                               当栈空的时候,再使用pop指令出栈;

8086CPU不会自动考虑栈顶超界,需要程序员在编程设计时自己考虑。栈区长度不同,栈顶超界的具体情形也不同。

 

(5) 寄存器DS的用途;命令mov, add, sub的更多操作数形式

DS: 数据段段寄存器,用于存放数据段的「段地址」

move指令:(1) 两个操作数长度要一致。

                    (2) 关于常数(也叫立即数)

                          ① 不能作为第1个操作数(目的操作数)

                          ② 作第2个操作数(源操作数)时,如果最高位是十六进制的a~f或A~F,前面要加零!

                    (3) 两个内存单元之间不能直接传送数据。

                    (4) 不能使用mov指令修改CS和IP的值。

                    (5) 关于段寄存器

                         ① 两个段寄存器之间不能直接传送;

                         ② 不能把常数送到段寄存器。

add指令:(1) add指令的操作数不能同时是内存单元

                 (2) add指令的操作数不能是段寄存器。

sub指令:(1) 两个内存单元不能直接使用sub指令相减。

                 (2) sub指令的操作数不能是段寄存器。

posted @ 2018-12-23 21:18  阳芃  阅读(171)  评论(0编辑  收藏  举报