小结 第三章

内存中字的存储

         内存以字节为单位,划分为若干个单元。
        计算机内数据存-取单位:
                ① 字节  (8bit)
                ② 字      (16bit)
                ③ 双字 (32bit)
                ④ 四字 (64bit) 字数据的存-取原则:高-高  低-低
即:
          ① 字数据的低位字节存放在低地址内存单元;
               字数据的高位字节存放在高地址内存单元;
          ② 取低地址内存单元地址作为字数据地址。

数据在内存和CPU之间的传送

           要在CPU和内存单元之间传送数据,就必须知道内存单元的地址。

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

          说明:
               (1)将一段内存用作数据段,是编程时的一种安排;
                 (2)  在mov, add, sub等汇编指令中,访问内存单元时,默认情况下,指的是数据段。

汇编指令mov, add, sub

            两个操作数长度要一致

                   例:
                            mov ax, cl   ×          mov ax, cx     √  
                            mov al, 300 ×   mov ax, 300   √ 

            关于常数(也叫立即数)

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

                            例:
                                   mov 4000H, ax ×     mov ax, 4000H     √
                                   mov ax, A400H ×     mov ax, 0A400H   √

注: 操作数是内存单元时,指令中只给出「偏移地址」。
      默认,「段地址」在ds中。

注: 操作数是内存单元时,指令中只给出「偏移地址」。
      默认,「段地址」在ds中。

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

                 栈的特性: 后进先出
                 两个概念: 栈底、栈顶
                 两个操作: 入栈、出栈
                 一个约定: 8086中栈以字为存取单位

         栈顶:  最后入栈的字数据所对应的地址单元
         栈底:  固定的一端,栈区最高地址单元的前一个单元
         入栈:  把数据存入栈
         出栈:  从栈取出数据
 
         SS: 栈段段寄存器,用于存放栈段的「段地址」
         SP: 栈指针寄存器,用于存放栈顶的偏移地址。
         SS:SP对应的物理地址是栈顶的物理地址
                       (SS) × 16 + (SP)  → 栈顶的物理地址
 
操作指令: push和pop
          

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

                          对8086CPU而言,push和pop的操作:
                          入栈和出栈均以字为单元
                          操作对象不能是常数
                          pop 段寄存器中,段寄存器不能是CS和SS

小结

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/20171308170-hc/p/9977795.html