1、第二章 实模式下存储器组织与寻址方式,2.1 实模式下存储器组织,2.2 寻址方式,第二章 实模式下存储器组织与寻址方式,本章重点: 1、实模式下存储器组织 2、8086数据寻址方式 3、8086程序寻址方式,一、存储单元的地址和内容,存储器以字节为单位存储信息,为了访问存储器,每个字节单元给的一个编号。,2、存储单元的内容,存储单元中存放的信息。,1、存储单元的地址,0000H0001H0002H0003H0004H,数据以字节为单位:(0002H)34H,数据以字为单位:(0002H)1234H,20H68H34H12H56H,2.1 实模式下存储器组织,数据以字节为单位:(0001H)6
2、8H,16位字长机器可访问的最大存储空间是21664K,而实模式下最大存储容量为2201M,20位地址才能访问1M空间。,1、分段原因,二、存储器的段结构,机器规定: 1) 从0开始,16字节为1小段,1M空间共分216个段。,2) 程序员编程时要把存储器分段,每个段大小可从064K,但起始地址不能任意,必须从一小段首址开始。,2、段的划分,00000H,00001H,00002H,0000EH,0000FH 00010H,00011H,00012H,0001EH,0001FH 00020H,00021H,00022H,0002EH,0002FH 00030H,00031H,00032H,00
3、03EH,0003FH 00040H,00041H,00042H,0004EH,0004FH. FFFC0H,FFFC1H,FFFC2H,FFFCEH,FFFCFH FFFD0H,FFFD1H,FFFD2H,FFFDEH,FFFDFH FFFE0H,FFFE1H, FFFE2H, FFFEEH,FFFEFH FFFF0H,FFFF1H, FFFF2H, FFFFEH,FFFFFH,1、逻辑地址,程序中使用的地址,由16位段地址和16位的偏移地址组成。,3、物理地址(PA),存储单元的实际地址。 在1M的存储器器里,每个存储单元都有一个唯一的20位地址,称该存储单元的物理地址。,2、有效地址(E
4、A),三、存储单元的地址,16位的偏移地址。,物理地址16位段地址左移4位16位偏移地址。,注:1)16位段地址:段起始地址的高16位值。 每一段的起始地址必须是小段的首址,故低4位为0。,2)16位偏移地址:段内相对于段起始地址的偏移量。,3)每一存储单元都有唯一的物理地址,它可由不同的段地址加不同的偏移地址组成。,例:若CS1000H,IP2051H, PA10000H+2051H=12051H,若CS1100H,IP1051H, PA=11000H 1051H12051H,注:改变段和偏移寄存器的缺省组合,须在指令中说明。,例:MOV AX, BX ;DS段中,BX寻址的单元内容送AX,
5、MOV AX, ES:BX ;ES段中,BX寻址的单元内容送AX,4、隐含段和偏移寄存器,5、实际应用中段之间可以互相重叠。,6、分段编址的优点,1)使指令系统中的大部分指令只涉及16位地址,减少了指令的长度,提高了程序的执行速度。,2)为程序的浮动装配创造了条件。,(2)程序本身是可浮动的,即程序不涉及物理地址,也就是和段地址无关系,只与偏移地址相关。,一、指令,2.2.1 基本概念,1、概念:指出计算机要进行的操作和操作对象 的一组代码。,例:MOV AX, BX,2.2 寻址方式,:说明操作对象。,:说明计算机要进行的操作。,二、指令系统,一台计算机全部指令的集合,构成指令系统。,三、寻
6、址方式,数据寻址方式:寻找指令中操作数的方式。,程序寻找方式:寻找指令转移目的地址的方式。,注:1、完成运算后,结果放进目标操作数,源操作数一般不改变,仅提供操作对象之一。,操作码 目标操作数 ,源操作数,例:ADD BX, AX,2、双操作数指令:目标和源操作数都有;单操作数指令:只有目标操作数;,例:INC AX,例:RET,单字节指令:目标和源操作数都没有。,四、汇编语言指令书写格式,与数据有关的寻址方式:以 MOV 指令为例 立即数寻址 MOV AX , 3069H 寄存器寻址 MOV AL , BH 直接寻址 MOV AX , 2000H 寄存器间接寻址 MOV AX , BX 基址
7、变址寻址 MOV AX , BP DI 寄存器相对寻址 MOV AX , COUNT SI 相对基址变址寻址 MOV AX , MASK BX SI ,2.2.2 数据寻址方式,特点:1、操作数在指令中给出,作为指令的一部分在代码段中。,例: MOV AL, 5MOV AX, 3064H,注: 1)主要用于对寄存器赋值。2)立即数可以是8位、16位。3)只能用于源操作数。,MOV 5, AL (),一、立即数寻址,2、执行速度快 操作数直接从指令取得,不需使用总线周期。,特点:1、操作数位于CPU内部寄存器中,指令指定寄存器号。,例: MOV AL, AHMOV AX, BX,注: 1)目的和
8、源操作数都可用寄存器寻址方式。2)目的和源操作数长度一致。,MOV BL, AX (),二、寄存器寻址,2、执行速度快 操作数在CPU内部,不需使用总线周期。,特点:1、操作数位于内存,指令指定数据在内存中的有效地址。,2、如未指明操作数所在的段,默认为数据段。,例:MOV AX, 2000H 假设DS=3000H, 则PA=30000H + 2000H =32000H,AX = 3050H,三、直接寻址,例:MOV AX, ES: 2000H ;将ES段2000H和2001H两单元的内容送AX寄存器。,3、可使用段前缀指明段寄存器。,4、操作数地址可由变量(符号地址)表示 VALUE DB
9、10 MOV AH, VALUE,三、直接寻址,特点:1、操作数位于内存,操作数的有效地址在BX、BP、SI 或DI中。,2、如未指明操作数所在的段,指令中指定的寄存器是 BX、SI或DI时,默认为数据段;指令中指定的寄存 器是BP时,默认为堆栈段。,例:MOV AX, BX ; PA = 16d DS+ BXMOV AX, BP ; PA = 16d SS + BP,四、寄存器间接寻址,例: MOV AX, BX如果DS2000H,BX1000H,则PA20000H1000H21000H,AX508AH,例: MOV AX, ES:BX;PA = 16d ES + BX,3、可使用段前缀指明
10、段寄存器。,四、寄存器间接寻址,2、源操作数和目的操作数的字长一致 MOV DL, BX ; BX指示一个字节单元MOV DX, BX ; BX指示一个字单元,注:1、不允许使用AX、CX、DX 存放 EAMOV AX, CX ,四、寄存器间接寻址,特点:1、操作数的有效地址是一个基址寄存器和一个变址寄存器的和。,五、基址变址寻址,2、如未指明操作数所在的段,指令中指定的基址寄存器是BX, 默认为数据段;基址寄存器是BP时,默认为堆栈段。,例:MOV AX, BX DI ;PA = 16d DS + BX+DIMOV AX, BP SI ;PA = 16d SS + BP +SI,五、基址变址
11、寻址,例: MOV AX, BX SI 等价于 MOV AX, BX+SI如果DS2100H,BX0158H,SI=10A0H则PA21000H0158H+ 10A0H 221F8H,例: MOV AX, ES:BX SI ;PA = 16d ES + BX + SI,3、可使用段前缀指明段寄存器。,注:必须是一个基址寄存器和一个变址寄存器的组合MOV AX, BXBP MOV AX, SIDI ,数组首址存放在基址寄存器中,变址寄存器访问数组中的元素。,4、适于数组、字符串、表格的处理,例:在数据段有一数组ARR,编程取出第十六个元素。,MOV BX, OFFSET ARR MOV DI,
12、0010H MOV AL,BX+DI,特点:1、操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的位移量之和。,六、寄存器相对寻址,2、物理地址计算,例: MOV AX, DI+0100H 如果DS2000H,DI=3000H 则PA20000H+3000H+ 0100H 23100H,六、寄存器相对寻址,例: MOV AX, ES:STRING SI ;PA = 16d ES + STRING+ SI,3、可使用段前缀指明段寄存器。,4、适于数组、字符串、表格的处理,例: MOV AX, COUNTSI,六、寄存器相对寻址,若DS=3000H, SI=2000H, COUNT=300
13、0H, 35000H=1234H 则 PA = 30000H2000H+3000H=35000H,MOV AX, COUNT+SI,AX=1234H,特点:1、操作数的有效地址是一个基址寄存器的内容、 一个变址寄存器的内容和指令中指定的位移量之和。,七、相对基址变址寻址,2、物理地址计算,例: MOV AX, STRBX+SI MOV AX, STRBX SIMOV AX, STR+BX+SI若DS3000H,BX=2000H,SI=1000H,STR=0250H则PA30000H2000H+ 1000H 0250H33250H,七、相对基址变址寻址,段内寻址段内直接寻址 JMP NEAR P
14、TR NEXT 段内间接寻址 JMP TABLE BX 段间寻址段间直接寻址 JMP FAR PTR NEXT 段间间接寻址 JMP DWORD PTR BX ,用来确定转移指令及CALL指令的转向地址。,2.2.3 8086的程序寻址方式,特点:转向的有效地址 = 当前IP + 位移量(8bit/16bit),注:NEXT为转向的符号地址,一、 段内直接寻址,例: JMP SHORT NEXT ;短转移, 转移范围 -128 +127 JMP NEAR PTR NEXT;近转移, 转移范围 -32768 +32767,短转移:当位移量为1个字节时,称短转移,符号地址前加操作符SHORT; 近
15、转移:当位移量为2个字节时,称近转移,符号地址前加操作符NEAR PTR。,特点:1、转向的有效地址是一个寄存器或存储单元的内容。,例: BX=1000H,SI=5280H,TABLE=2000H DS=2000H,23000H=3280H,26280H=2450H,2、有效地址送IP寄存器,JMP BX,JMP TABLEBX JMP WORD PTR TABLEBX,JMP BXSI JMP WORD PTR BXSI,; IP=1000H,; IP=3280H,; IP=2450H,注:存储单元的地址可用除立即数以外的任何一种数据 寻址方式得到。,二、 段内间接寻址,特点:用指令中提供的
16、转向段地址和偏移地址取代CS 和 IP。,注:FAR PTR:段间转移操作符。,三、 段间直接寻址,特点:用存储器中的两个相继字的内容取代CS 和 IP。,例: JMP DWORD PTR BX;BX、BX1所指的内存单元内容送IP;BX2、BX3所指的内存单元内容送CS,注:存储单元的地址可用除立即数和寄存器以外的任何一种 数据寻址方式得到。,CALL DWORD PTR DI ;调用地址在DIDI+3所指的内存单元,四、段间间接寻址,1、对于以下CS:IP组合,计算每条指令的存储器地址。1)CS=1000H, IP=2000H2)CS=1234H, IP=1000H 2、实模式下存储器管理采用分段方式,每段最大的寻址空间为 ,20位的物理地址由 加 形成。 3、设BX1000H,DI0010H,DS2100H,在指令MOV AX,BX+DI中,源操作数的寻址方式为 ;物理地址为 。,思考题,