ch3-1 8086指令系统(寻址方式).ppt

ch3-1 8086指令系统(寻址方式)

* 2. 寄存器寻址 操作数在某个寄存器中。 例:INC BL 操作:使BL中内容加1后送回 +1 BL 00 若BL=00H,则执行后BL=01H BL=FFH,则执行后BL=00H (自动溢出) 01 3.2 寻址方式 8086指令系统中操作数所在地址寻址方式可以分为8种: 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址-变址寻址 基址-变址-相对寻址 隐含寻址 存储器寻址 3. 存储器寻址 操作数在存储器中的一个或几个单元中。 在这种寻址方式下,要找到该操作数,关键是必须找到该操作数所在单元的地址。 由于8086采用存储器段组织结构,内存单元的地址由段起始地址 (基地址) 和该单元与段起始地址之间的距离 (以字节数计) 两部分共同决定。 段起始地址(基地址):某个段寄存器的内容(又称段基值)乘以16得到。 段内偏移量:该单元与段起始地址之间的距离(字节数) 。又称有效地址EA。 有效地址EA 待寻址的内存单元 (CS, DS, ES, SS)?16? 段基地址 物理地址 =段基址?16+EA 内存单元物理地址 8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定。故指令中一般只需给出有关EA的信息,则CPU将能够根据该次操作自动选用段寄存器,并与EA一起形成物理地址。 存储器寻址的实质就是如何形成有效地址EA。 3.存储器寻址—— (1) 直接寻址 指令中以偏移量方式直接给出操作数的有效地址。即 EA=指令中给出的偏移量 例:MOV AX,[1234H] 机器码:A1 34 12 操作:把偏移量1234H作为EA,在数据段中找到相应的字单元,再将字单元的内容送AX。 本例执行完后,AX=3050H EA=1234H 设DS=3000H 31234H 1234H + EA=1234H 31234H 56 78 30 50 DS?16 =30000H 30000H = 3000H×16 ... A1 34 12 ... ... 50 30 ... 指令 代码段 数据段 AH AL AX MOV AX, [1234H] 直接寻址的操作过程与立即寻址不同。为表示它们的区别,直接寻址的偏移量用一对 “[ ]”表示。 立即寻址:MOV AX,1234H 直接寻址:MOV AX,[1234H] 段基址乘以16,相当于段基值(二进制表示)左移4位,或段基值(十六进制表示)在末尾添一个0H。 注: 3.存储器寻址——(2) 寄存器间接寻址 以间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。 以BX,SI,DI作为间址寄存器,操作数在数据段中。 以BP作为间址寄存器,操作数在堆栈段中。 基址寻址 变址寻址 注: 例:MOV AX,[BX] 机器码:8B 04 操作:以BX的内容作为有效地址EA,在数据段中找到对应的字单元,再将该字单元的内容送AX中。 EA=BX 设DS=2000H,BX=1000H 本例执行后 AX=50A0H DS=2000H DS?16 20000H EA=BX(=1000H) 21000H 50 A0 8B ... ... 04 A0 50 代码段 数据段 AX AH AL 这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址指针寄存器。 例:ADD AX,[SI] EA=SI 操作:以EA作为有效地址,在数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。 3.存储器寻址——(3) 寄存器相对寻址 操作数的存放地址由间址寄存器加上一个给定的偏移量,专用的间址寄存器仍然是:BX,BP,SI,DI。 例:MOV AL,DATA[BP] 这里DATA是以符号表示的位移量。 EA=BP+位移量DATA 操作:以EA作为有效地址,在堆栈段中去寻址字节单元,再将该字节单元内容送AL。 EA=BX或BP的内容+8位或16位位移量 默认段寄存器的关系与寄存器间接寻址相同,允许段跨越 ① 使用BX、SI、DI,默认段寄存器为DS (BX) PA = ( DS )×10H + (SI) + 偏移量 (DI) ② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP ) + 偏移量 MOV AL,DATA[SI] MOV AL, [SI] DATA MOV AL,DATA+[SI] MOV AL, [SI] +DAT

文档评论(0)

1亿VIP精品文档

相关文档