第三章

3.1~3.5

1、字单元:存放一个字型数据(16位)的内存单元,由2个地址连续的内存单元组成。(例:由2,3俩内存单元组成的字单元起始地址为2,称2地址字单元)

2、DS寄存器:存放要访问数据的段地址。

例:mov bx,1000h    (1)    (不能mov ds,1000h)

  mov ds,bx  (2)    (数据不能   直接送入  段寄存器)

  mov al,[0]    (3)   ([...]表示一个内存单元,【0】中的0表示内存单元的偏移地址)

  mov [0],cx    (4)    (cx中的16位数据送到1000:0处)

  sub ax,9  (5)      (将ax中的数据—9存入ax)

3、可以将一组   长度为N(<=64kb),地址连续,起始地址为16倍数   的内存单元当作专门存储数据的内存空间,即定义一个数据段。

 

3.6~3.10

1、栈操作规则:LIFO(last in first out)

2、8086CPU入栈出栈以字(俩字节)为单位。,

3、栈顶段地址和偏移地址存放于SS,SP寄存器。

4、为防止栈顶超界,要根据可能用到的最大栈空间来安排栈的大小,防止入栈数据太多导致的超界;出栈操作时注意栈空时继续出栈导致的超界。

5、例:

mov ax,1000h

mov ss,ax     (1)     初始化栈顶,为10010h。

mov sp,0010h

 

mov ax,001ah

mov bx,001bh       

 

push ax

push bx  (2)ax,bx入栈 1000fh处为00,1000eh为1a;   ( 栈顶变为sp-2,数据存于 sp-2处)

                1000dh处为00,1000ch为1b;

 

pop ax  (3)出栈:ax为001bh;

pop bx         bx为001ah

(push,pop 执行时只修改SP;栈顶最大变化范围为0~ffffh,容量为64KB;because:栈空时SP=0,栈满时SP也为0,如果再次压栈则栈顶环绕,覆盖原本内容)

6 、数据段,代码段,栈段的段地址存放于DS,CS,SS中。

实验二

由于访问内存的指令如“mov ax,[0]”默认段地址在DS,所以debug执行如“d 段地址:偏移地址”这种D指令时最好将段地址送入DS。

具体参见P72.

 

posted @ 2018-11-19 20:27  不吃耗子的猫  阅读(107)  评论(0编辑  收藏  举报