汇编语言学习笔记(三)

来源:互联网 发布:gone一首网络歌曲 编辑:程序博客网 时间:2024/04/30 13:33

主要内容:从访问内存的角度学习几个寄存器

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

2.什么是字单元?

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

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

 

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

5.在8086PC中,内存地址由段地址和偏移地址组成。

6.8086CPU中有一个 DS寄存器,通常用来存放要访问的数据的段地址。

7.mov指令的格式:
       mov 寄存器名,内存单元地址

       寄存器名可以是上述的DS寄存器;“[…]”表示一个内存单元, “[…]”中的0表示内存单元的偏移地址。

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

8.mov 寄存器名,内存单元地址,是把某内存地址单元的值送入某寄存器里去;

   mov 内存单元地址,寄存器名,是把某寄存器的值送入到某内存地址单元中去;

9.mov命令总结:
        mov 寄存器,数据
     mov 寄存器,寄存器
     mov 寄存器,内存单元
     mov 内存单元,寄存器
     mov 段寄存器,寄存器
        mov 寄存器,段寄存器
        mov 内存单元,段寄存器
        mov 段寄存器,内存单元

10.add和sub指令同mov一样,都有两个操作对象。

 

11.什么是数据段?

     将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,叫做数据段。

12.将一段内存当作数据段,是我们在编程时的一种安排,我们可以在具体操作的时候 ,用 ds 存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。

   如:mov ax  123BH

           mov ds ,ax

           add al,[0]        ;读的只是一个内存单元的值,所以用AX的低8位来接收

           add al,[1]

           add al,[2]

           add ax,[0]        ;读的是一个字单元的值,所以用16位的寄存器AX来接收

           add ax,[2]

           add ax,[4]

 

13.栈有两个基本的操作:入栈和出栈。
     入栈:将一个新的元素放到栈顶;
     出栈:从栈顶取出一个元素。

14.栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。(Last In First Out,后进先出)

15.栈的操作命令:
    push ax:将寄存器ax中的数据送入栈中;
    pop ax :从栈顶取出数据送入寄存器ax中。

16.8086CPU中,有两个寄存器:
     段寄存器SS   存放栈顶的段地址
     寄存器SP      存放栈顶的偏移地址
     任意时刻,SS:SP指向栈顶元素。

17.栈顶超界的问题?

      当栈满的时候再使用push指令入栈,
      栈空的时候再使用pop指令出栈,
      都将发生栈顶超界问题。

      栈顶超界是危险的。

      结论:

     我们在编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。

18.push和pop指令的格式:

     push 寄存器:将一个寄存器中的数据入栈
     pop寄存器:出栈,用一个寄存器接收出栈的数据
     push 段寄存器:将一个段寄存器中的数据入栈
     pop段寄存器:出栈,用一个段寄存器接收出栈的数据
     push内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)
     pop 内存单元:出栈,用一个内存字单元接收出栈的数据

19.关于栈的结论:

    push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。

    同时,push和pop指令还要改变 SP 中的内容。

    push和pop指令同mov指令不同,CPU执行mov指令只需一步操作,就是传送,而执行push、pop指令却需要两步操作。

20.栈操作步骤:
    执行push时:先改变SP,后向SS:SP处传送。
    执行pop时:先读取SS:SP处的数据,后改变SP。

21.一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即:CS、IP、SS、SP、DS的指向。

原创粉丝点击