汇编语言学习笔记(2)

 21.段的概念:其实内存并没有分段,段的划分来自于CPU.在8086PC机中,存储单元的地址用两个元素来描述,即段地址+偏移地址.

22.段寄存器:在8086中有4个段寄存器:CS,DS,SS,ES.

23.CS和IP是8086中最关键的两个寄存器:它们联合指示了CPU当前要读取指令的地址.CS为代码段寄存器,IP为指令指针寄存器.在8086中,任意时刻,CPU将CS:IP指向的内容当作指令来执行.假设CS中的内容为M,IP中的内容为N,那么CPU将取M*16+N中的内容作为指令来执行.这样,就区别了指令和其他数据,它们在CPU中都为二进制.

24.指令的执行过程:

     a)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;

     b)IP=IP+所读指令的长度,从而指向下一条指令;

     c)执行指令,转步骤a),重复这个过程.

内存中指令和数据没有任何区别,都是二进制信息,那么如何区别...?----How...?CPU将CS:IP指向的内存单元中的内容看作指令,或者说只要是指令,肯定是曾今或者将要被CS:IP指到.因此,程序员可以通过改变CS:IP来控制CPU执行目标命令.

 

 

25.mov:传送指令,可以改变大部分寄存器的值,但是不能用于设置CS,IP的值 .能够改变CS,IP的内容的指令被统称为转移指令.若想同事修改CS和IP的值,可以使用"jmp"指令:

              jmp    段地址:偏移地址

e.g:     jmp    2AE3:3,执行后,CS=2AE3H,IP=0003H.

段地址填充CS,偏移地址填充IP.

26.若仅想改变IP的内容,使用:jmp   合法寄存器

              jmp    ax;     将ax中的内容写入IP中.

 

 

27.代码段:CPU只认被CS:IP指向的内存单元中的内容为指令.所以,要让CPU执行我们放在代码段中的指令,必须得将CS:IP指向所定义的代码段中的第一条指令的首地址.其中CS和IP都是由程序员自己设置的,将来会学到的数据段和stack段也是一样的.

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

 

 

29.DS和[address]:DS寄存器,通常用来访问数据的段地址.

关于mov指令:

     a)将数据直接送入寄存器:mov   ax,1000H

     b)将一个寄存器内的内容放入另外一个寄存器中:mov    ax,bx

     c)将一个内存单元中的内容放入寄存器中:mov     al,[0]

                           mov   寄存器名,内存单元地址

30.[...]表示一个内存单元,"[0]"中的0表示内存单元中的偏移地址.那么按照基础地址+偏移地址的寻址方式,还差一个基础地址,也就是段地址...Where...?指令执行时,CPU将自取DS中数据为内存单元的段地址.DS:当前段地址.

31.8086中,不支持将数据直接写入段寄存器.

32.熟悉mov,add,sub指令.

33.数据段:可以定义一个地址连续,起始地址为16的倍数的内存单元当作专门存储数据的内存空间,从而顶一个了一个数据段.可以在具体操作的时候用DS存放数据段的地址.

34.怎么设定数据段的大小...?----How...?

 

你可能感兴趣的:(c,汇编,存储,语言)