8086汇编各种寻址方式大全
- 格式:doc
- 大小:38.50 KB
- 文档页数:3
8086是intel公司推出的一款16位微处理器,它采用了20位位置区域总线,能够寻址1MB的内存空间。
在8086中,存储器和I/O端口的编址方式对于系统的设计和应用具有重要意义。
本文将围绕8086对存储器和I/O端口的编址方式展开深入探讨。
一、存储器的编址方式1. 实位置区域模式8086微处理器最初工作在实位置区域模式下,通过物理位置区域直接对存储器进行寻址。
在实位置区域模式下,8086可以访问的存储器空间为1MB,位置区域空间范围为0xxxx~0xFFFFF。
2. 分段位置区域模式为了克服实位置区域模式下1MB内存的局限性,8086引入了分段位置区域模式。
在分段位置区域模式下,8086通过段基址寄存器和偏移位置区域的组合来访问存储器,可以实现对更大容量的存储器进行访问。
3. 段基址寄存器在分段位置区域模式下,8086中的段基址寄存器包括CS(代码段寄存器)、DS(数据段寄存器)、ES(额外段寄存器)和SS(堆栈段寄存器),它们分别用来存放代码段、数据段、额外段和堆栈段的基址。
4. 偏移位置区域8086微处理器中,偏移位置区域用来表示段内的相对位置区域,它的范围为0~xxx。
5. 分段位置区域的形式在8086中,物理位置区域的计算方式为:物理位置区域=段基址×16+偏移位置区域。
通过这样的方式,8086可以实现对1MB范围内的存储器进行寻址。
二、 I/O端口的编址方式1. 端口编址方式8086微处理器通过端口编址方式来对I/O设备进行访问,I/O端口的位置区域空间范围为0~xxx。
2. IN指令和OUT指令8086微处理器提供了IN指令和OUT指令用于进行I/O端口的读写操作。
IN指令用于从指定端口读取数据,OUT指令用于向指定端口写入数据。
3. I/O端口位置区域的分配在8086系统中,I/O端口位置区域的分配由外围设备的制造商进行规划,保证不同的外围设备具有不同的端口位置区域,从而避免了位置区域冲突。
8086 的寻址方式摘要: 指令的一般格式:操作码操作数……操作数计算机中的指令由操作码字段和操作数字段组成。
操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的过程中...计算机中的指令由操作码字段和操作数字段组成。
操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的过程中所需要的操作数。
该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。
8086 的基本寻址方式有六种。
1.立即寻址所提供的操作数直接包含在指令中。
它紧跟在操作码的后面,与操作码一起放在代码段区域中。
如图所示。
例如:MOV AX,3000H立即数可以是8 位的,也可以是16 位的。
若是16 位的,则存储时低位在前,高位在后。
立即寻址主要用来给寄存器或存储器赋初值。
2.直接寻址操作数地址的16 位偏移量直接包含在指令中。
它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS 加上这16 位地址偏移量。
如下图所示。
例如:MOV AX,DS:[2000H];(对DS 来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB 的范围内寻找操作数。
8086 中允许段超越,即允许操作数在以代码段、堆栈段或附加段为基准的区域中。
此时只要在指令中指明是段超越的,则16 位地址偏移量可以与CS 或SS 或ES 相加,作为操作数的地址。
MOV AX,[2000H] ;数据段MOV BX,ES:[3000H] ;段超越,操作数在附加段即绝对地址=(ES)*16+3000H3.寄存器寻址操作数包含在CPU 的内部寄存器中,如寄存器AX、BX、CX、DX 等。
微处理器指令系统概述:一台计算机所能识别和执行的全部指令,称为该机器的指令系统,又称指令集。
一般指令分为:“告诉计算机干什么”的指令操作助记符,“指令操作对象”即操作数。
寻址方式概述:指定操作数或操作数存放位置的方法称为寻址方式。
8086的寻址方式有三类:立即寻址、寄存器寻址和存储器寻址;其中存储器寻址又分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址五种。
立即寻址:操作数直接写在指令中的寻址方式,因为这种操作数称为立即数,所以这种寻址方式也称为立即数寻址方式。
立即数可以使8位;16位;32位;例如:MOV AX,6789H ADD AX,1234H寄存器寻址:指令所要的操作数事先已存储在某寄存器中,或把目标操作数存入寄存器中,或者源操作数和目标操作数都是寄存器。
例如:MOV AX,BX MOV AX,6789H(源操作数是立即数寻址,目的操作数是寄存器寻址)存储器寻址:在存储器中查找操作数。
1·直接寻址方式:指令所要的操作数存放在内存中,在指令中直接给出操作数的段地址和有效地址,从而使8086的BIU部件能够利用地址加法器得到实际物理地址。
例如:MOV AX,DS:[2000H](mov 默认DS为存放数据的段,所以这个指令等价于MOV AX,[2000H])MOV AX,ES:[2000H]2·寄存器间接寻址方式:操作数在存储器中,操作数的有效地址用SI,DI,BX,BP 4个集训期之一来指定。
若不使用段前缀,则规定若有效地址用SI,DI,BX等之一来指定,则默认的段寄存器是DS,若有效地址用BP来指定,则其默认的段寄存器位SS。
例如:MOV BX,[DI]3·寄存器相对寻址方式:操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI、DI)的内容和指令中的8/16位偏移量之和。
例如:MOV BX,[SI+100H]4·基址加变址寻址方式:操作数有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI,DI)的内容之和。
8086CPU中的寻址⽅式⼀寻址⽅式定义寻址⽅式:求操作数所在地或者所在存储器地址单元的⽅式。
指令中的操作数,⼤多数都在存储器单元当中,也可以在寄存器⾥⾯,也可以是在指令中⽴即给出的常数。
我们都把求得她们的⽅式归属于寻址⽅式。
类型寻址⽅式按求得的操作数的⽬的不同,可以分为两类:1. 数据⽤2. 程序要实现转移的地址⽤如果要实现段内转移,就需要求得段内偏移地址给IP⽤,如果要实现段间转移,除了偏移地址外,还需要求得⽬的地的段地址给CS⽤。
要计算的数据的所在存储地址怎么得到,或者转移的地址内容的所在存储地址怎么得到,就需要⽤以⼀种寻址⽅式去求得。
关于数据的寻址⽅式1.⽴即数寻址要寻找的操作数在指令中⽴即给出,直接以常数给出。
如mov AX,1234HAX是⽬的操作数,1234H是源操作数,对于源操作数⽽⾔,采⽤的就是⽴即数寻址。
指令中要传送给AX的数据在哪⾥呢?指令中⽴即给出了。
这就叫⽴即数寻址。
要搞清楚8086⽴即寻址,就需要了解谁和谁之间可以传送从图中可知,在8086当中,⽴即数只能作为源操作数。
⽴即数传送数据时要类型明确。
mov [0002H],15H中括号⾥⾯表⽰的是地址,这条语句是把⽴即数15H送到地址为0002H的存储器单元中。
但是我们只知道地址是多少,不知道存储器单元的存储类型是什么?语法错误。
类型不明确。
这中问题只要源操作数和⽬标操作数有⼀⽅明确,双⽅均能明确(不⼀致另说)。
双⽅不明确,类型不明确。
改mov WORD PTR [0002H],15H如果要传送数据给段寄存器,不能直接⽴即数传送,要按箭头⾛。
从图中也可以看出,段寄存器CS单独划分出来,因为⽤户⽆法改变CS的内容,和IP寄存器⼀样,开机的内容由操作系统完成。
执⾏期间是由CPU完成转移指令改变。
CS和IP不能做⽬标操作数,但是可以做源操作数。
2.寄存器寻址指要寻找的操作数在某寄存器当中。
如mov AX,BX对于源操作数⽽⾔,要操作的数据在BX寄存器中,这就是寄存器寻址。
8086寄存器和7种寻址⽅式1. 8086处理器有以下寄存器:类别位数名称通⽤16AX, BX, CX, DX8AH,AL,BH,BL,CH,CL,DH,DL指针16SP(stack pointer,堆栈指针),BP(base pointer,基址指针)索引(变址)16SI(source index,源索引),DI(destination,⽬的索引)段16CS(code segment,代码段),DS(data segment,数据段),SS(stack segment,堆栈段),ES(extra segment,附加段)指令16IP(instruction pointer,指令指针/指令计数器)标志16FR(flag register,标志寄存器)其中:1). 段寄存器CS,DS,SS,ES分别保存端代码段,数据段,堆栈段,辅助数据段的起始地址,段寄存器只能由其他寄存器载⼊值,不能由主存直接载⼊.2). 基址寄存器BX,SP,BP⽤于保存相对段⾸地址的偏移地址,其中BX的默认段寄存器是DS,⽽SP,BP的默认段寄存器是SS.3). 索引寄存器(⼜叫变址寄存器)SI,DI,既可⽤于存放存储单元在段内的偏移量,⼜可⽤于存放在相对于段内偏移量的偏移量(详见下⽂寻址⽅式).4). 操作数相对于段⾸的偏移地址⼜称有效地址.(参考⾃《x86 PC 汇编语⾔,设计和接⼝》)1). ⽴即数寻址⽅式操作数作为指令的⼀部分,紧跟在操作码之后,该寻址⽅式执⾏得很快.将信息装载到除了段寄存器和标志寄存器以外的寄存器:MOV AX,2550H ;将2550H装⼊AXMOV CX,625;将⼗进制数625装⼊CXMOV BL,40H ;将40H装⼊BLView Code要将信息移到段寄存器,必须现将数据装载到通⽤寄存器,再移到段寄存器:MOV AX,2550HMOV DS,AX ;正确MOV DS,2550H ;错误View Code2). 寄存器寻址⽅式操作数在寄存器中,指令指定寄存器号.16位操作数的寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP等;8位操作数的寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH等.寄存器寻址⽅式和⽴即数寻址⽅式不涉及内存访问,因⽽可以取得较⾼的运算速度.如:MOV BX,DX ;将DX的内容复制到BXMOV ES,AX ;将AX中的内容复制到ESADD AL,BH ;将BH中的内容加到ALView Code3). 直接寻址⽅式操作数在内存,但操作数的有效地址作为指令的⼀部分,紧跟在操作码之后.默认段寄存器为DS().如:MOV DL,[2400] ;将DS:2400H的内容移到DLMOV [3518],AL ;将AL的内容移到DS:3518HView Code4). 寄存器间接寻址⽅式操作数在内存,但操作数的有效地址由SI,DI,BX,BP指定,其中SI,DI,BX默认的段寄存器是DS,BP默认的段是SS.如:MOV CL,[SI] ;将DS:SI中的内容移到CLMOV [DI],AH ;将AH的内容移到DS:DIView Code5).寄存器相对寻址⽅式操作数的有效地址是⼀个基址或变址寄存器的内容和指令中指定的8位或16位位移量(displacement)之和.如:MOV CX,[BX]+10;[BX]+10也可以写作[BX+10]或10[BX]MOV AL,[BP]+5MOV DX.[SI]+5View Code6). 基址变址寻址⽅式操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容之和,默认段寄存器为基址寄存器的默认段寄存器.如:MOV CL,[BX][DI] ;将DS:BX+DI的内容移到CL7). 相对基址变址寻址⽅式(Relative based indexed addressing)操作数的有效地址是⼀个基址寄存器和⼀个变址寄存器的内容和8位或16位位移量之和,这种寻址⽅式为像数组元素遍历等堆栈处理提供了⽅便.如:MOV CL,[BX][DI]+8;将DS:BX+DI+8的内容移到CL,[BX][DI]+8也可以写作[BX+DI+8]MOV CH,[BX][SI]+20View Code。
8086寻址方式及举例8086寻址方式指的是在Intel 8086处理器中进行内存访问的方式。
8086寻址方式主要有以下几种:1. 直接寻址(Direct addressing):给出地址直接访问内存中的数据。
2. 寄存器寻址(Register addressing):使用寄存器中存放的地址进行内存访问。
3. 寄存器间接寻址(Register indirect addressing):使用寄存器中存放的地址作为内存地址的间接寻址方式。
4. 寄存器相对寻址(Register relative addressing):使用一个寄存器中存放的地址作为起始点,加上一个常数作为偏移量。
5. 基址加变址寻址(Base + index addressing):使用基址寄存器和变址寄存器相加得到内存地址。
6. 相对基址加变址寻址(Base + index + offset addressing):使用基址寄存器、变址寄存器和一个常数作为偏移量相加得到内存地址。
举例:1. 直接寻址: MOV AX, [1000H] 表示将内存地址为1000H的数据复制到AX寄存器中。
2. 寄存器寻址: MOV AX, BX 表示将BX寄存器中的数据复制到AX寄存器中。
3. 寄存器间接寻址: MOV AX, [BX] 表示将内存地址为BX寄存器中的数据所指向的内存单元中的数据复制到AX寄存器中。
4. 寄存器相对寻址: MOV AX, [BX+2] 表示将内存地址为BX寄存器中的数据加上2所得到的地址中的数据复制到AX寄存器中。
5. 基址加变址寻址: MOV AX, [BX+SI] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址中的数据复制到AX寄存器中。
6. 相对基址加变址寻址: MOV AX, [BX+SI+2] 表示将基址寄存器BX和变址寄存器SI中的数据相加得到的地址再加上2所得到的地址中的数据复制到AX寄存器中。
8086/8088七种寻址方式(一)8086/8088寄存器组(二)8086/8088寻址方式(1)立即寻址方式操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。
这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。
例如指令:MOV AX,1234H的存储和执行情况如下图:图中指令存放在代码段中,OP表示该指令的操作码部分再例如:MOV AL,5 则指令执行行,(AL)=05HMOV BX,3064H 则指令执行后,(BX)=3064H(2)寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP,和BP等:对于8位数,寄存器可以是:AL,AH,BL,BH,CL,CH,DL,DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。
例如:MOV AX,BX如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变例如:MOV SI,AXMOV AL,DH(3)直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。
操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
如下图所示:在汇编语言指令中,可以用符叼地址代替数值地址。
如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是相等的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE或MOV AX,ES:[VALUE]直接寻址方式常用于处理单个存储器变量的情况。
它可实现在64K字节的段内寻找操作数。
直接寻址的操作数通常是程序使用的变量。
1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?寄存器寻址最快7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。
XCHG CS , AX ;不能修改CSMOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送XCHG BX , IP ;不能用名字直接访问IPPUSH CSPOP CS ;不允许直接修改CS值IN BX , DX ;输入数据必须使用累加器AL或AXMOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000MOV CS , [1000];不允许直接修改CS值20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少?利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么?栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址)B P75. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H,(31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H,(32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容:(1) MOV AX,BX (2) MOV AX,[BX](3) MOV AX,4200H (4) MOV AX,[2800H](5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI]9. 分别执行下列各指令组,写出AX的内容:(1) MOV AX,93A4HNEG AX73A4-8c5c,e689-1977(AX)=6C5CH(2) XY DW "AB"MOV AX,XY(AX)=4142H(3) MOV AX,2B7EHMOV CX,4DB5HADD AX,CX(AX)=7933H(4) XA DW 0BD57HMOV AX,0FBCDHAND AX,XA(AX)=B945H(5) STCMOV BX, 0B69FHMOV AX, 43A2HSBB AX, BX(6) MOV AX, 3537HMOV BL, 39HADD AL, BLAAA(AX)=3606H(7)XY DB "AB"MOV AX, WORD PTR XY(AX)=4241H10. 找出下列指令中所有对的指令,写出题号,错误的请说明原因。
各种寻址方式
1. 立即寻址:直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。
例:MOV AL,50H
MOV DS, 1250H 错误
2. 寄存器寻址:存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。
例:MOV AL,BL
MOV CL, BX 错误
以下寻址方式3~8,操作数都在存储器中。
存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储
器操作数的偏移地址;用类型名 PTR 偏移地址的形式说明指令中存储器操作数的类型,例:WORD PTR [1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存
储器操作数,如BUF DB 10H,20H。
3. 存储器寻址
(1)直接寻址:存储器操作数的16位偏移地址直接包含在指令的方括号中。
例:MOV AL,[1000H] 约定由DS提供段地址
MOV AL,CS:[1000H] ;段超越,由CS提供段地址
MOV AL,SS:[1000H] ;段超越,由SS提供段地址
例:MOV AX, [2000H] 如果(DS)= 3000H,则AX的物理首地址为:3000*10+2000
(2)寄存器间接寻址:操作数所在的存储单元的偏移地址放在指令给出的寄存器中。
可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。
其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。
例:MOV AX,[SI] ;AX←DS:[SI]
MOV [BX],AX ;DS:[BX]←AX
例:MOV AX, [BX]
如果(DS)= 2000H, (BX)= 1000H,
则物理地址 = 20000H + 1000H = 21000H
(3)寄存器相对寻址
这种寻址方式通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址,计算物理地址的缺省段仍然是SI、DI和BX为DS,BP为SS。
例:MOV AX, COUNT[SI](也可表示为MOV AX, [COUNT+SI])
其中COUNT为16位位移量的符号地址。
如果(DS)= 3000H,(SI)= 2000H,COUNT = 3000H
则物理地址 = 30000H + 2000H + 3000H = 35000H
(4)基址寻址:操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。
例:MOV AX,[BX+3AH] ;AX←DS:[BX+3AH]
MOV [BP+4EB3H],AX;SS:[BP+4EB3H]←AX
(5)变址寻址:操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS 中,允许段超越。
例:MOV [DI+12H],AX ;DS:[DI+12H] ←AX
MOV BX,SS:[DI+45H] ;BX←SS:[DI+45H]
(6)基址变址寻址:操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。
例:MOV BX,[DI+BP+45H] ;BX←SS:[DI+BP+45H]
MOV AX,ES:[SI+BX+76H];AX←ES:[SI+BX+76H]
例:MOV AX, [BX][DI] (或写为 MOV AX, [BX+DI])
如 (DS ) = 2100H,(BX)= 0158H,(DI)= 10A5H
则 EA = 0158H +10A5H = 11FDH
物理地址 = 21000H +11FDH = 221FDH
注意:基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。
(7)相对基址变址寻址
这种寻址方式与基址变址寻址方式类似,不同的是基址加变址再加上一个位移量形成操作数的有效地址。
缺省段的使用仍然是DS与BX组合,SS与BP组合
例:MOV AX, MASK[BX][SI]
(或 MOV AX, MASK[BX+SI],或 MOV AX, [MASK+BX+SI])
如(DS)= 3000H,(BX)= 2000H,(SI)= 1000H,MASK = 0250H,
则物理地址 = 30000H + 2000H + 1000H + 0250H = 33250H
二、与转移地址有关的寻址方式
前面介绍的与数据有关的寻址方式最终确定的是一个数据的地址,而这里介绍的与转移地址有关的寻址方式最终确定一条指令的地址
三种表示转移距离的操作符:
SHORT转移,称为短转移,位移量用一个字节(8位)来表示。
NEAR转移,称为近转移,位移量用16位表示,因为程序控制仍然在当前代码段,所以只修改IP的值,CS 的值不变。
FAR转移,称为远转移,因为程序控制超出了当前代码段,所以CS和IP都必须修改为新的值。
1、段内直接寻址
这种寻址方式在指令中直接指出转向地址,如:
JMP SHORT NEXT
JMP NEAR PTR AGAIN
其中,NEXT和AGAIN均为转向的符号地址。
在机器指令中,操作码之后给出的是相对于当前IP值的位移量(转移距离),所以,转向的有效地址是当前IP值与指令中给出的位移量(8位或16位)之和注意:这种寻址方式适用于条件转移及无条件转移指令,当用于条件转移指令时,位移量只允许8位。
假设:(DS)= 2000H,(BX)= 1256H,(SI)= 528FH,
位移量 = 20A1H,(232F7H)= 3280H,(264E5H)= 2450H。
JMP BX
则执行该指令后(IP)= 1256H
JMP [BX][SI]
则指令执行后(IP)=(16d ×(DS)+(BX)+(SI))
=(20000H + 1256H + 528FH)
=(264E5H)
= 2450H
2、段内间接寻址
这种寻址方式在指令中用数据寻址方式(除立即寻址方式外)间接地指出转向地址,如:
JMP BX
JMP NEAR PTR [BX]
JMP TABLE[SI]
注意:这种寻址方式以及以下的两种段间寻址方式都不能用于条件转移指令。
3、段间直接寻址
段间直接寻址和段内直接寻址类似,指令中直接给出转向地址,不同的是,在符号地址之前要加上表示段间远转移的操作符FAR PTR。
指令格式如下:
JMP FAR PTR OUTSEG
因为是段间转移,CS和IP都要更新,这个新的段地址和偏移地址由指令操作码之后的连续两个字提供,所以只要将指令中提供的转向偏移地址装入IP,转向段地址装入CS,就完成了从一个段到另一个段转移的工作。
4、段间间接寻址
这种寻址方式仍然是用相继两个字的内容装入IP和CS来达到段间的转移目的的,但这两个字的存储器地址是通过指令中的数据寻址方式(除立即寻址方式和寄存器寻址方式外)来取得的
为了说明寻址两个字单元,指令中必须加上双字操作符DWORD。
指令格式如下:
JMP DWORD PTR [SI]
JMP DWORD PTR[TABLE+BX]。