第三章 8086的寻址方式和指令系统[3-1]
第3章 80X86的指令系统和寻址方式

通用寄存器 ;
(3)变址:其值存放在变址寄存器中。SI、DI 、除ESP外的 32位通用寄存器 ; (4)比例因子:是386及后继机型中新增寻址方式中的术语。 其值可为1、2、4、8。
寻址方式
立即数寻址 寄存器寻址 存储器寻址
直接寻址 寄存器间接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址
练习
MOV AX, ARRAY[4]
MOV AX, [BX] MOV AX, [BX+2] ;直接寻址,偏移地址= ARRAY+4 ;寄存器间接寻址
;寄存器相对寻址 MOV AX, ARRAY [BX] ;寄存器相对寻址
MOV AX, [BX+SI] MOV AX, [BX+DI+2]
;基址(BX)变址(SI)寻址 ;相对基址变址寻址
;(BX)←1234H ;(AX)←(BX)
4)寄存器间接寻址方式
有效地址包含在基址寄存器或变址寄存器中;
寄存器可以是BX、BP、SI、DI之一。
(1) 以BX、SI、DI进行寄存器间接寻址,隐含的段
寄存器为数据段寄存器DS 。
MOV AX, [BX]
;物理地址=DS×16+BX ;物理地址=DS×16+SI ;物理地址=DS×16+DI
2)立即数(常数)到存储单元的数据传输
例 3.18 MOV MEM_BYTE, 20H ;将立即数20H送到MEM_BYTE存储单元 MOV DS:[0005H], 4500H ;立即数4500H送到DS:0005H的存储单元中
3)立即数到通用寄存器的数据传输 例 3.19 MOV AL, 20H MOV SP, 2000H ;将立即数20H送到AL寄存器 ;将立即数2000H送入SP寄存器
第3章 8086的指令系统—3.1寻址方式

例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式
3. 寻址方式与指令系统

算术运算类指令
加法指令(Addition) 带进位加法指令(Add with carry) 加1指令(Increment) 减法指令(Subtraction) 带借位减法(Subtract with borrow) 减1指令(Decrement) 求负数指令(Negative)
加法指令(Addition)
指令格式:add dest,src 功能:目的操作数和源操作数相加,其和数 存放在目的操作数中,源操作数原有内容不 变。 根据相加结果设置标志寄存器中的CF、PF、 AF、ZF、SF和OF。 Add指令可以进行字或字节操作。 对src和dest的具体内容的要求。
加法指令
Add ax,bx Add al,bl Add cx,20 Add cl,0A4h Add dl,da_byte Add da_word[si],dx 对于第四条指令,如果(cl) = 0e5h,
指令格式
双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
传送类指令
数据传送指令(move) mov dest,src 可以进行字节数据传送,也可以进行字数据 传送。 mov cl,05h ;字节传送 mov ax,1234h ;字传送 mov da_byte,12h ;字节传送 mov da_word,1234h ;字传送
位操作类指令
逻辑运算指令(Logical) 测试指令(Test) 移位/循环移位指令(shift/rotate) 处理器控制类指令
逻辑运算指令(Logical)
数据传送指令(move)
寄存器之间的传送 mov dl,cl ;字节传送 mov ax,bx ;字传送 mov ds,ax ;通用寄存器和段寄存器之间的 传送
微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统

4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存器 间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing) 位移量是一带符号的16位16进制数。当 使用BX或BP寄存器时,称基址寻址;使用SI 或DI寄存器时,称变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① JC ② JNC ③ JE/JZ ④ JNE/JNZ ⑤ JS ⑥ JNS ⑦ JO ⑧ JNO ⑨ JP/JPE ⑩ JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址
寻址方式和指令系统

寻址⽅式和指令系统《微机原理》复习思考题第3章 8086的寻址⽅式和指令系统3.1 8086汇编语⾔指令的寻址⽅式有哪⼏类?⽤哪⼀种寻址⽅式的指令执⾏速度最快?3.2 直接寻址⽅式中,⼀般只指出操作数的偏移地址,那么,段地址如何确定?如果要⽤某个段寄存器指出段地址,指令中应如何表⽰?3.3 在寄存器间接寻址⽅式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 ⽤寄存器间接寻址⽅式时,BX,BP,SI,DI分别针对什么情况来使⽤?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进⾏说明。
3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下⾯两条指令所进⾏的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使⽤堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下⾯这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进⾏修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会⾃动禁⽌外部中断,等到本条指令和下条指令执⾏之后,⼜⾃动恢复对SS寄存器赋值前的中断开放情况。
这样做是为了允许程序员连续⽤两条指令分别对SS和SP寄存器赋值,同时⼜防⽌堆栈空间变动过程中出现中断。
3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请⽤换码指令和其他指令设计⼀个程序段,实现格雷码往ASCII的转换。
第三章 8086的寻址方式和指令系统

计算机的指令通常包含 操作码 和 操作数 两部分。
设SP为0100H,SS为1000H,则执行PUSH AX 后,
00FE H,SS= 1000 H。 8086系统中,栈底在堆栈的 最高地址 (最高地址端、 最低地址端)。
如果VAL为数据段中0056H单元的符号名,其中存放
16
习题 CH3 寻址方式和指令系统
(6)MOV [SI],[BX] 源、目的操作数不能同时为存储单元 (7)MOV DS,0200H 立即数不能直接送给段寄存器 (8)IN BL,05H BL不能作为IN指令的目的操作数 (9)MOV AX,IP IP不能作为操作数 (10)MOV SI,[DX] DX不能进行寄存器间接寻址 (11)PUSH AL PUSH指令以字为操作单位
用单条指令或程序片段,实现下述功能
(1)将AX高8位取反,低四位置1,其余位不变。
XOR AX, 0FF00H
OR AX, 0FH (2)将AL的高四位与低四位互换。 MOV CL, 4 ROL AL, CL
(3)将BX、AX内容互换。
XCHG AX, BX
12
习题 CH3 寻址方式和指令系统
[BP+SI+4]源操作数的有效地址为
地址为 数的有效地址为
,物理 0214H 24514H 。指令MOV AX,[DI+100H]源操作
0306H,物理地址
为 24306H 。 设AX=2000H,BX=2002H,则在执行了指令CMP AX,
BX后,标志位CF为
1 , AX=
。 2000H
基址变址寻址
(5)MOV AX,10[BX][DI] 相对基址变址寻址
汇编课第3章寻址方式与指令系统之3 (1)

北京理工大学-张华平-2010
24
① 段内直接短转移 格式:JMP SHORT LABEL 例.
JMP SHORT B1 ;无条件转移到B1标号处 A1: ADD AX,BX B1: …
北京理工大学-张华平-2010
25
② 段内直接转移 格式:JMP LABEL 或: JMP NEAR PTR LABEL
同上
测试并取反由SRC 指定的DST中的位
同上
表3-4 位测试指令
北京理工大学-张华平-2010
10
三、位扫描指令
从386开始增加了位扫描指令,它们包括 BSF、BSR指令,可用于扫描操作数中第一个含 1的位。
北京理工大学-张华平-2010
11
1.顺向扫描指令 BSF 格式:BSF DST,RSC 功能:从右向左扫描RSC操作数中第一个含1的
… B3: SUB AX,CX
… C2 ENDS
北京理工大学-张华平-2010
动画演示
29
2.条件转移指令 执行这类指令时通过检测由前边指令已
设置的标志位确定是否转移,所以它们通常 是跟在影响标志的指令之后。这类指令本身 并不影响标志。
条件转移指令的通用汇编格式: JCC LABEL
北京理工大学-张华平-2010
(设为n),空出的位用操作数OPRD2高端的n位 填充,但OPRD2的内容不变,最后移出的位在进 位标志CF中。
2.双精度右移指令 SHRD 格式:SHRD OPRD1,OPRD2,CNT
北京理工大学-张华平-2010
20
3.6 程序控制指令
本节提供的指令可以改变程序执行的顺 序,控制程序的流向。它们均不影响标志位。
表3-7 检测北单京理个工大条学件-张华标平志-201位0 转移指令 33
汇编语言 第3章1 80x86的指令系统和寻址方式

CS、DS、SS、ES
寄存器寻址指令
MOV AX,1234H MOV BX,AX ;AX←1234H ;BX←AX
寄存器寻址
3.1.4 存储器寻址方式
指令中给出操作数的主存地址信息(偏移
地址,称之为有效地址EA),而段地址在 默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
量之和,寄存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP
寄存器默认是SS;可用段超越前缀改变 MOV AX,[DI+06H]; mov ax,table[di] ;AX←DS:[DI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H] 相对寻址
;AX←DS:[BX+SI+06H]
相对基址变址
位移量可用符号表示 同一寻址方式有多种表达形式
指令操作数的表达-寄存器
r8——任意一个8位通用寄存器
AH AL BH BL CH CL DH DL
r16——任意一个16位通用寄存器
AX BX CX DX SI DI BP SP
reg——代表r8或r16
(4)基址变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上
变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP
基址寄存器默认是SS;可用段超越前缀改变 MOV AX,[BX+SI] ;AX←DS:[BX+SI] MOV AX,[BP+DI] ;AX←SS:[BP+DI] MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADD AL, 10
HLT
§3-1 8086的寻址方式
一、概述
2、指令通常应提供的信息
按做什么操作 操作数从哪里来 操作结果放在哪里 对于调用和转移指令,还要涉及转移或调用地址的提供方式
3、指令的组成
操作码( Opcode ) --标明计算机要执行什么操作 操作数( Operand ) --指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地 方),以及操作结果送到哪里。 操作数可以存放在寄存器、存储器、I/O端口地址中,也可以是在指 令中(立即数)。
作用:寄存器之间传递数据。
17
§3-1 8086的寻址方式
二、寄存器寻址(Register Addressing)
例: MOV DX,AX ; DX
指令执行前:AX=2233H 指令执行后:AX=2233H,DX=2233H
AX内容不变
AX
AX
2233H
DX
18
§3-1 8086的寻址方式
作用:实现对存储器单元的读/写操作。
21
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing)
例:
MOV AX , [2A00H]
MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
存储器存取时约定段
22
§3-1 8086的寻址方式
6
§3-1 8086的寻址方式
一、概述
5、操作指令
现代微型计算机中多采用双操作数指令,两个操作数分别称 为“目的操作数”和“源操作数”。指令执行后,把运算结 果放到目的操作数的地址之中。 指令的操作码在机器中的表示比较简单,只要对每一种操作 指定相应的二进制代码即可;而指令的操作数字段的情形就 比较复杂。
代 码 段
15
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
注意:
(1)在所有指令中,立即数只能用于源操作数,而不 能作目的操作数。 (2)以A~F打头的数字出现在指令中时,前面一定要 加一个数字0,以免与其它符号混淆。 例: × MOV 2A00H, AX ; 错误!
25
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing)
注意:
(1)指令中有效地址的表示:[立即数] ,以便与立即数相区别。 (2)如果没有用“段跨越前缀”标明操作数在哪一段,就默认段寄存器 为数据段寄存器(DS)。 (3)如数据在数据段以外的其它段(即CS、SS、ES)中,则应指明 “段跨越前缀”。如MOV AX , ES : [100H],冒号“:”称为修改 属性运算符。 (4)为了使指令字不要过长,规定双操作数指令不能两个操作数都用直 接寻址方式。
在8086指令系统中,寻址方式可分为8种:
一、立即寻址 二、寄存器寻址
三、直接寻址
四、寄存器间接寻址
五、寄存器相对寻址
六、基址变址寻址 七、相对基址变址寻址 八、其它:隐含寻址、I/O端口寻址等
13
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
一、概述
举例:
MOV AL, 7 ;立即数取入累加器
ADD
HLT
AL,10 ;加立即数
;停机
说明
汇编指令(助记符形式) 机器码(二进制形式) MOV AL, 7
1011 0000(MOV AL, n) 一条两字节指令,把指 令第二个字节的立即数 0000 0111(n=7) 送到累加器AL 0000 0100(ADD AL, n) 一条两字节指令,累加 器AL中的内容与指令第 二字节的立即数相加, 0000 1010(n=10) 结果放在AL中 1111 0100(HLT) 停止操作
二、寄存器寻址(Register Addressing)
注意:
(1)源操作数与目的操作数的长度要相同。
(2)寄存器寻址与段地址无关。
例: MOV AX, BX MOV [3F00H], AX MOV CL, AL × MOV AX, BL ;源、目操作数长度不一致! × MOV ES: AX, DX ;寄存器寻址与段地址无关!
立即数只能作为指令的源操作数, 如:
MOV AX,0FA00H MOV 8000H,DX ;正确 ;错误
8
§3-1 8086的寻址方式
一、概述
(2)寄存器操作数:指令要使用的数据存放在CPU内部 寄存器中,在指令中给出寄存器的名称。
放在8个通用寄存器(AX,BX,CX,DX,SI,DI,SP,BP)或4个 段寄存器(CS,DS,SS,ES)中的操作数 既可以作为源操作数, 也可以用作目的操作数 通用寄存器可存放字节操作数(如AL), 也可存放字操作数 (如AX) SI, DI, BP及SP只能存放字操作数 段寄存器只能存放当前操作数的段基地址 不允许将立即数传送到段寄存器: × MOV DS,200H
微型计算机原理与接口技术
第五讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
14
§3-1 8086的寻址方式
一、立即寻址(Direct Addressing)
例: MOV AX,3102H ; AX 3102H
执行后,AH = 31H,AL = 02H
存储器 立即寻址指令在存储 器中的存放形式 AX AH AL 操作码 立 即 数
操作码 低8位 高8位
代 码 段
02H 31H
--某一CPU所能执行的全部指令的集合 定义了程序员能使硬 件完成的基本操作。
机器指令(机器码)
--指令的二进制代码形式。例如:CD21H
汇编指令
--利用指令的助记符( Mnemonic Symbol )、符号地址、标号 来编写的语言。例如:MOV AX, 21H
3
§3-1 8086的寻址方式
5
§3-1 8086的寻址方式
一、概述
4、指令的一般格式
操作数可以有零个,一个或两个。
操作码
示例:
(1)单操作数指令: INC
操作数
。。。 操作数
AX;只需要指出加1的操作数,它AX, BX
大多数运算型指令都是双操作数指令。
(3)无操作数指令:如 NOP(空操作指令)
第三章 8086的寻址方式和指令系统
内容提要
8086的寻址方式
微机系统指令的机器码表示方法(自学)
8086的指令系统
2
§3-1 8086的寻址方式
一、概述
1、有关定义 指令(Instruction) --指示CPU执行某种规定操作的命令 指令集或指令系统 (Instruction Set)
……
MOV AX, AREA1 则 (AX)=1234H
24
§3-1 8086的寻址方式
用符号地址代替数值地址(即给存储单元起个名字)
例2:伪指令DW(定义变量)
AREA1 DW 2000H;AREA1代表符号地址 …… MOV AX, AREA1; (或MOV AX, [AREA1]) 则如右图所示, DS=2000H, AX=1234H
定义: 指令中直接给出操作数,操作数紧跟在操作码之后, 作为指令的一部分存放在代码段里,在取出指令的同时 也就取出了操作数,立即有操作数可用,所以称之为立 即寻址。 特点: 立即数可以为8位,也可以为16位。如果是16位数, 则“高字节存放在代码段的高地址单元中,低字节存放在代 码段的低地址单元中”。 作用: 常用于给寄存器赋初值。
§3-1 8086的寻址方式
一、概述
6、寻址方式
定义:指令中用于说明操作数所在地址的方法。 一个指令系统能够提供哪些寻址方式,能否为编制程序提供 方便,这是指令系统设计的关键。 说明:在不同的计算机系统中,寻址方式的名称和分类并不 统一。 各种寻址方式指令执行速度不同: 操作数在寄存器中指令执行速度快:在CPU内部立即执行 立即数寻址指令执行速度较快:直接从指令队列中取数 操作数在存储器中指令执行速度较慢:通过总线与CPU交换 数据
19
§3-1 8086的寻址方式
寻址方式
注意:除以上两种寻址方式(立即寻址:操作数 包含在指令中,而寄存器寻址:操作数包含在寄 存器中)外,下面各种寻址方式的操作数均在 存储器中,通过采用不同的寻址方式取得操作 数的物理地址,从而取得操作数。
20
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing) 定义:
16
§3-1 8086的寻址方式
二、寄存器寻址(Register Addressing) 定义:
操作数在寄存器中,指令中指明寄存器的名称,这种寻 址方式叫寄存器寻址。
特点:
(1)对于8位操作数,寄存器可以是 AH, AL, BH, BL, CH, CL, DH, DL 。对于16位操作数,寄存器可以是AX, BX, CX, DX, SI, DI, SP 和 BP 。 (2)操作数就在寄存器中,不需要访问存储器来取得操作数 (指令执行时,操作就在CPU的内部进行),因而执行速度快。 (3)在编程中,如有可能,尽量使用这种寻址方式的指令。
双操作数指令形式:操作码
目的操作数,源操作数
7
§3-1 8086的寻址方式
一、概述
三类操作数(分别对应三种可能的存放位置):立即数,寄存 器操作数,存储器操作数 (1)立即数:操作数以常量的形式出现指令中,称为立即数。