第三讲2 操作数的寻址方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将[DS:SI]为地址的一个字节/字传送到 [ES:SI]地址,然 后修改地址指针 SI,DI并使CX减1(计数) I/O端口寻址:端口 累加器(AL/AX) 使用间接端口寻址方式,须先将端口号传送到DX中。 IN AX,35H 直接端口寻址方式 8位地址可访问256 IN AL,DX 个端口 OUT 4FH,AL OUT DX,AX
MOV AX, 目的操作数 寄存器寻址 [200H] 源操作数 直接寻址
AH
已知 DS=1500H
87
DS 1500 0 + 020 0 1520 0 AL
8B 06 00 02
代码段
6A
15200
87 6A
数据段
2、 直接寻址——段超越前缀
逻辑地址来源 操作类型 取指令 堆栈操作 BP为间址 存取变量 源字符串 目标字符串 隐含段地址 CS SS SS DS DS ES 替换段地址 无 无 CS DS ES CS DS ES CS DS ES 无 偏移地址 IP SP 有效地址EA 有效地址EA SI DI
物理地址 : CPU对存储器中某一个存储单元的访问, 需要根据逻辑地址计算出该存储单元的20位地 址,这个20位地址称为该存储单元的物理地址, 物理地址记做PA。 物理地址=段寄存器的值×16+偏移地址
8086的寻址方式
1、 立即寻址方式
操作数直接包含在指令码中
MOV SI, 4A3CH SI
4A 3C 以IP为指针 取指令 M
基址寻址
DS BX COUNT
3000 0 200 0 400 0
… 36000H
78 56
56 78 AX
5.变址寻址
操作数的EA = SI/DI变址寄存器的内容+指令中给出位移量 SORNT DB 40H,00H … MOV SI, OFFSET SORNT MOV BL, [SI+100H]
例 将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区
DATA BUFA COUNT BUFB DATA STACK STACK CODE START: SEGMENT DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H BUFB EQU ($-BUFA)/2 DW COUNT DUP (?) ENDS SEGMENT STACK DB 200 DUP(?) ENDS BUFA SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE MOV AX,DATA MOV DS,AX INC DI MOV SI,0 INC DI MOV DI,0 DEC CX MOV CX,COUNT JNZ LOP MOV AX,BUFA[SI] MOV AH,4CH MOV BUFB[DI],AX INT 21H INC SI CODE ENDS INC SI END START
存储器寻址方式 直接寻址 变址寻址 等价的书写格式 [200H]、alpha 200H [SI] 、[200H+SI] [BX+SI] [BX]+[SI] 1000 H [BX+SI] 相对基址加变址寻址 [BX+SI+1000 H]
基址加变址寻址
[BX]+[SI]+1000 H
④ 在存储器寻址方式中,通常根据寄存器BX、BP、SI、DI 使用隐含规定的段寄存器,其中使用BX、SI、DI寄存器时 段寄存器是DS,使用BP寄存器时段寄存器是SS。
基址寻址
DS
SI
3000 0 200 0 010 0
32100H
78 56
78 BL
6.基址变址寻址
操作数的EA = 基址寄存器+变址寄存器 BX /BP SI/ DI
• 基址变址寻址
MOV BX, [BP]+[DI]
SS 2000 0 BP 120 0 DI 050 0
BX 8B C7
21700
BE 3C 4A
指令队列 (BIU)
BE 3C 是指操作数的偏移地址在指令中直接给出。
例如:MOV AX,[200H];将数据段中偏移地址为200H的字送入AX
假设数据段的段地址DS=1500H,(15200H)字单元的值是876AH,问执行指 令后,相关寄存器及存储单元的值是什么? 答: EA=200H PA=(DS)*16+EA=15000H+200H=15200H
AX, [BX] 等效 MOV AX, DS:[BX] 例:MOV BX, [BP] 等效 MOV AX, SS:[BP]
例:MOV
操作数的EA为寄存器的内容 BX、SI 、DI-------DS BP------SS MOV BX,[SI]
例如:MOV AX,[BX]
该指令执行之前,DS=2000H,AX=54C8H,BX=0300H, 存储单元20300H的内容是6A9BH。 问:执行指令后,相关寄存器及存储单元的值是什么? 源操作数的地址为: EA=(BX)= 0300H PA=(DS)*16+EA=2000H*16+0300H=20300H
LOP:
关于寻址方式的几点说明:
① 对于单操作数指令,操作数可以使用除立即寻址方式之外的各种寻址方式。 对于双操作数指令,源操作数可以使用各种寻址方式,目的操作数可以使用除立即 寻址方式之外的各种寻址方式,但源操作数和目的操作数不能同时采用存储器寻址 方式。 ② 立即寻址和直接寻址在表现形式上的区别是是否带有[ ],寄存器寻址和寄存 器间接寻址在表现形式上的区别也是是否带有[ ]。带有[ ]的操作数属于存储器操作 数,[ ]内的值表示存储器操作数的偏移地址。 ③ 存储器寻址方式有多种等价的书写形式
寄存器直接寻址,寄存器的内容就是操作数 例:MOV BX, AX 寄存器间接寻址是指操作数的偏移地址在BX、BP、SI和DI四个寄存器之一。 (1)当以BX、SI或DI寄存器进行间接寻址时,操作数的物理地址由DS中 的段地址与BX、SI或DI中的偏移地址构成。 (2)当以BP寄存器进行间接寻址时,操作数物理地址由SS中的段地址与 BP中的偏移地址构成 。
带有的操作数属于存储器操作存储器寻址方式有多种等价的书写形式存储器寻址方式等价的书写格式直接寻址200halpha变址寻址200hsi200hsi基址加变址寻址bxsibxsi相对基址加变址寻址1000bxsibxsi1000在存储器寻址方式中通常根据寄存器bxbpsidi使用隐含规定的段寄存器其中使用bxsidi寄存器时段寄存器是ds使用bp寄存器时段寄存器是ss
MOV BX, [SI] BX 31 8B
DS 1000 0 SI 200 0 1200 0
12000
8B 1C
} 操作码
8B 31
4. 基址寻址(寄存器相对寻址)
操作数的EA = BX/BP基址寄存器的内容+指令中给出位移量
COUNT EQU 4000H MOV AX,COUNT[BX] ( MOV AX,[BX+4000H] )
第三讲 操作数的寻址方式
立即寻址 直接寻址 寄存器间接寻址 变址寻址 基址加变址寻址 相对基址加变址寻址 逻辑地址 物理地址
操作数的寻址方式
存储器寻址是指指令所需要的操作数存放在内 存中,在指令中给出操作数地址的方式。
逻辑地址: 一个存储单元的段地址和偏移地址称为该 存储单元的逻辑地址,也称为有效地址EA (Effective Address) 形式为:段地址:偏移地址
实际上,操作数也可以存放在其他段中,比如:附加的数 据段、堆栈段、代码段。如果操作数存放在其他段,如附 加的数据段ES,则计算物理地址时,段寄存器就不能使用 DS,而应该使用ES,并通过使用段前缀的方式在指令中给 出。 例如: MOV ES:SUM,AX
其他寻址方式
隐含寻址 :无操作数指令 例1 CBW 将AL中的8位有符号数的符号位扩展 为16位有符号数,结果保存于AX中. 例2 串传送指令 MOVSB/MOVSW
间接端口寻址16位 地址由DX提供可访 问64K个端口
如果对替换段地址存取变量,应在指令中指 出段超越前缀
MOV AX,ES:[2000H]
2、 直接寻址——符号地址
汇编语言允许使用符号地址----先定义,后使用. 方便地引用存储单元的内容
AREA
DW 0867H MOV AX, AREA
源操作数为直接寻址方式
AX
08
67
DS:AREA
67 08
3.寄存器间接寻址
C7 8B
5.相对基址变址寻址
操作数的EA = 基址寄存器+变址寄存器+指令中给出的位移量
MOV BX, [BX+SI+40H]
BX DS SI
120 0 3000 0 200 0 40
33240
BF 26
BX
26 BF
MOV
AX, [BX+SI+1000 H]
该指令执行之前,DS=2000H,AX=6528H,BX =0500H,SI=0300H,存储单元21800H的内容是 0B874H。 执行指令后,相关寄存器及存储单元的值是什么? 源操作数的地址为: EA= (BX)+(SI)+1000 H = 0500H+ 0300H+1000 H =1800H PA=(DS)*16+EA=2000H*16+1800H = 21800H。
相关文档
最新文档