8086寻址方式及举例
第3讲 8086&8088指令系统-寻址方式

Hale Waihona Puke 8088/8086的寻址方式
• 五、变址寻址(Index Addressing) – 指令的操作数是一个带括号的寄存器和一个 8位或16位偏移量。将寄存器的内容和偏移 量之和作为操作数的偏移地址,将地址单元 的内容作为操作数。 – 这个偏移量可以是一个立即数,也可以是一 个符号,这个符号一般表示一个地址。 – 可以使用的寄存器仍然是SI、DI、BX、BP, BP仍然由堆栈段寻址。
12
8088/8086的寻址方式
– 当另一个操作数是立即数时,由于立即数本身 也不决定操作数的位数,此时,为了明确操作 数的位数,需要在直接地址前,加上一个说明 位数的算符: MOV [2000H],100 ;不正确,位数不定 MOV BYTE PTR[2000H],100 ;8位操作数 MOV WORD PTR[2000H],100 ;16位操作数 13
14
8088/8086的寻址方式
四、寄存器间接寻址 指令的操作数部分用一个加括号的寄存器来表示,实 际是将寄存器的内容作为偏移地址,将地址单元的内容作 为指令的操作数。 只在寄存器SI、DI、BX、BP任何一个中存放16位偏 移地址。 由[DS:SI]或[DS:DI]或[DS:BX]或[SS:BP]形成数据的 有效地址来得到操作数。
8088/8086的寻址方式
– 直接寻址由于对变量的操作:可以对一个变 量赋值;也可以将一个变量的值赋给另一个 操作数。 – 变量本质上就是地址单元的内容,对变量的 操作是要通过变量的地址来进行的,直接地 址就是表示变量地址的一种方式。 – C语句x=y,写成指令就是:
• MOV AL,Y • MOV X,AL
11
8088/8086的寻址方式
寻址方式

第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
操作码
(DS)*10H=20000H + 1064H 21064H
64 10
代 码 段
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
计算EA的通式为:
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量 (Displacement) :它是存放在指令中的一个 8 位或 16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
M
31000H
…
AX
40000H
AL
30000H
…
42000H
50 40
31000H
…
64H
40
50
64H
…
第4章 80x86指令系统
③寄存器间接寻址-变址寻址方式 MOV CL, [SI]
(DI) EA= (SI)
操作码
64 10
代 码 段
DS 20000H SI 1000H + 21000H 20000H … CL 45 21000H 45 …
DS DS,SS DS,ES DS SS DS SS
3. 寄存器 [SI/DI] 变址寻址 4. 基址+变址 [BX+SI/DI] 寻址 [BP+SI/DI] 5. 基址+变址 [BX+SI/DI+disp] +位移量 [BP+SI/DI+disp]
第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? 操作码 操作数或操作数地址 指令的格式
微机原理第三章 8086的寻址方式和指令系统ppt课件

4、寄存器间接寻址方式 (Register Indirect Addressing)
EA在指定的寄存器中,只能是基址BX、BP,变址SI、 DI四者之一。 MOV AX, [DX] (非法)
默认关系:SS:BP, DS:BX、SI、DI 可进行段超越,如 MOV AX,DS:[BP]
• 根据有效地址EA〔Effective Address〕的构成 方式,存储器寻址分为以下五种:
• 段寄存器使用的基本约定 •
3、直接寻址方式(Direct Addressing) EA就在指令中,默认段寄存器为DS 如:MOV AX,[2000H] 设DS=3000H 则EA=2000H,PA=DS×16+EA=32000H, 操作数来自32000H〔或3000H:2000H处),结果AX=3514H
例如: MOV AX,COUNT[BX][SI] MOV AX,COUNT[BX+SI] MOV AX,[BX+SI+COUNT]
以上三者等价
如 MOV AX,MASK[BX][SI] 设DS=4100H,位移量MASK=0134H,BX=2500H,SI=1200H 则EA=(BX)+(SI)+MASK=3834H,PA= (DS)
• 8086的指令按功能可分为六大类:数据传送指令、 算术运算指令、逻辑运算和移位指令、字符串处 理指令、控制转移指令、处理器控制指令。
一、数据传送指令:负责数据在寄存器、存储器、I/O端口 之间的传递,特点是不影响标志位。
1.通用数据传送指令 (1) MOV 传送指令〔Move) 格式:MOV 目的,源;(源)→(目的)
8086的寻址方式

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寻址方式及指令系统(wq)

1、 汇编语言
汇编语言是一种面向CPU指令系统的程序设计语言,它 采用指令系统的助记符来表示操作码和操作数,用符号地址 表示操作数地址,因而易记、易读、易修改,给编程带来很 大方便。
用汇编语言编写的程序能够直接利用硬件系统的特性,直 接对位、字节、字寄存器、存储单元、I/O 端口等进行处理, 同时也能直接使用CPU指令系统和指令系统提供的各种寻址 方式编制出高质量的程序,这种程序不但占用内存空间少, 而且执行速度快 。
B8H、C3H的助记符为MOV AX,BX 。 CPU不同,机器码不同,助记符也不同。
• 高级语言 语言规范,可移植。
4.1.3 汇编语言与汇编程序
• 汇编语言→汇编语言源程序 ✓ 用助记符表示机器码 ✓ 用符号地址表示存储器地址 ✓ 用伪指令管理源程序 汇编程序 将汇编语言源程序(简称源程序)编译为机器所
默认
段寄 DS
DS
存器
SS
SS DS ES CS
可加 的段 超越 前缀
ES: SS: CS:
ES: SS: CS:
DS:
ES:
ES:
— SS: —
—
CS:
CS:
固定 搭配 的寄 存器
SP SI
DI
IP
段超越前缀
段超越前缀形式为: 段寄存器名:
例如:
当操作数在内存单元时,系统根据隐含约定,自 动将寄存器DS或SS的值作为段地址。然而,当操作 数段地址不在隐含的段寄存器时,可以使用段超越前 缀取代其隐含约定。
其它等效写法: MOV [SI]10,AH MOV 10[SI],AH
寻址过程示意
变址寻址过程示意图
汇编语言2-1寻址方式
EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。
第三章 8086指令系统和寻址方式
汇编语言复习辅导第三章8086指令系统和寻址方式应掌握编写一个完整的汇编语言程序所必需的知识及其相应概念:(1)汇编语言程序的格式(2)常用伪指令(伪操作)(3)8086寻址方式(4)8086指令系统1汇编语言程序格式. 80x86的逻辑段:堆栈段、数据段、附加段、代码段(1)完整段定义;- - - - - - - - - - - - - - - - - - - - - - -STSEG SEGMENT ;定义堆栈段DB 64 DUP(?)STSEG ENDS;- - - - - - - - - - - - - - - - - - - - - - -D T SE G S E G M E N T;定义数据段DATA1 DB 36HDATA2 DB 4BHS U M D B?D T SE G E N D S;-----------------------CDSEG SEGMENT ;定义代码段M A I N P R O C F A R ASSUMECS:CDSEG,DS:DTSEG,SS:STSEGSTART: MOV AX,DTSEG MOV DS,AX;设置数据段地址M O V A L,D A T A1;用户程序M O V B L,D A T A2A D D A L,B L M O V S U M,A LMOV AH,4CH ;返回DOSINT 21HM A I N E N D PCDSEG ENDSEND START ;汇编结束(2)简化段格式:·M O D E L S M A L L;存储模型·S T A C K100H;定义堆栈段及大小·D A T A;定义数据段V A R1D B?·C O D E;定义代码段M A I N P R O C F A R;定义过程S T A R T:M O VD X,@D A T A;设置数据段M O V D S,A X; 地址…M O V A X,4C O O H;返回DOSI N T21HM A I N E N D P;过程结束E N D S T A R T;汇编结束2.常用伪操作(1)程序结构伪操作段定义伪操作:段名S E G M E N T……段名E N D S过程定义伪操作:过程名P R O C[N E A R/F A R]……过程名E N D P程序开始和结束伪操作:T I T L E程序名----程序说明(<60个A S C I I字符)E N D[S T A R T]段分配伪操作:A S S U M E C S:代码段名,D S:数据段名A S S U M E S S:堆栈段名,E S:附加段名(2) 数据类型及数据定义伪操作•O R G指定数据的存储地址或代码段的起始地址例: ORG 100H 例: ORG 100HDATA1 DB 100 START: MOV AX,BX•D B定义字节,其后的数据存储在一个字节中•D W定义字,对其后的数据分配2个字节,数据的低8位存放在低字节,高8位存放在高字节; List File for DD Examples00A0O R G 00A0H00A0F F030000D A T A13D D102300A45C960800D A T A14D D10001001011001011100B00A8F2572A5C D A T A15D D5C2A57F2H00A C2300000089470300D A T A16D D23H,34789H,65533F D F F0000•D Q定义4字,为数据分配8个字节单元•D T定义5字,为压缩的B C D数据分配存储单元例如:D A T A D Q1122334455667788HD A T B D T?•D U P按照给定的次数来复制某个(某些)操作数例如:D A T C D W32D U P(?)D A T D D B5D U P(0,8D U P(1))•E Q U赋值伪操作•=C O U N T E Q U25C O U N T E RD B C O U N TM O V A H,C O U N TT E M P=25M O V A H,T E M PT E M P=T E M P+1M O V A L,T E M P(3)属性伪操作•PTR指定操作数的类型属性M O V A X,W O R D P T R D A T BM O V B L,B Y T E P T R D A T W•LABEL定义变量或标号的类型属性B_D A T L A B E L B Y T EW_D A T D W50D U P(?)3. 8086寻址方式寻址方式--指令中表示操作数地址的方式,学习时要注意:(1) 正确书写各种寻址方式的汇编格式(2) 清楚各种寻址方式所指定的操作数或操作数地址在何处?( 指令中/ 寄存器中/ 存储器单元中)(3) 各种存储器寻址方式是如何形成操作数的物理地址的?(段寄存器/ 基址、变址寄存器/ 偏移量的组合关系)(4)各种寻址方式限定使用的寄存器<1>与数据有关的寻址方式小结寻址方式操作数地址(PA)指令格式举例立即寻址操作数由指令给出MOVDX, 100H ;(DX)←100H寄存器寻址操作数在寄存器中ADD AX, BX ;(AX)←(AX)+(BX)直接寻址操作数的有效地址由指令直接给出MOV AX, [100] ;(AX)←(100)MOV AX,V AR ;(AX)←(V AR)寄存器间接PA=(DS)×16+(BX)或(SI)或(DI)PA=(SS) ×16+(BP) MOV AX, [BX]; (AX)←((DS)×16+(BX))寄存器PA=(DS)×16+(BX)或(SI)或(DI)+位移量相对寻址PA=(SS) ×16+(BP)+位移量MOV AL, MESS[SI];(AL)←((DS)×16+(SI)+OFFSET MESS)基址变址PA=(DS)×16+(BX)+(SI)或(DI)PA=(SS) ×16+(BP) +(SI)或(DI) MOV AX, [BX+DI];(AX)←((DS)×16+(BX)+(DI))相对基址PA=(DS)×16+(BX)+(SI)或(DI)+位移量变址寻址PA=(SS) ×16+(BP) +(SI)或(DI)+位移量MOV AX, BUFF(BX+DI);(AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF)<2> 与转移地址有关的寻址方式用来确定转移指令及C A L L指令的转向地址。
第3章8086的寻址方式和指令系统
第3章8086的寻址方式和指令系统【课前思考】(1)什么是指令和指令系统?指令在什么时候由哪部分来执行?(2)8086汇编语言指令由几部分组成?各部分的作用是什么?(3)8086汇编语言指令可以有几个操作数?指令中指定的操作数可能存放在哪里?(4)什么是寻址方式?8086汇编语言提供了几种寻址方式?(5)各种寻址方式所确定的有效地址是什么?(6)在存储器寻址方式中,为什么有时候要使用段跨越前缀?(7)8086机器语言指令由哪几个字节组成?为什么说汇编语言指令与机器指令是一一对应的?(8)8086的指令系统按功能可分为几组?(9)每条指令的功能、助记符、所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【学习目标】熟练掌握8086各种寻址方式;熟悉8086常用指令的功能【学习指南】学习寻址方式时,要注意各种寻址方式所指定的操作数或操作数地址是什么;各种寻址方式形成操作数地址时,段寄存器和基址、变址寄存器的组合;各种寻址方式限定使用的寄存器。
学习指令系统时,要注意每条指令的功能,所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【难重点】重点理解8086常用指令的功能,熟悉8086的各种寻址方式,这是进行汇编语言程序设计的基础。
【知识点】3.1 寻址方式3.3 指令系统第一节 8086的寻址方式指令的一般格式:例如,单操作数指令就是一地址指令,它只需要指定一个操作数,如加1指令只需要指出需要加1 的操作数。
大多数运算型指令可使用三地址指令:除给出参加运算的两个操作数外,还指出运算结果的存放地址。
也可使用二地址指令,此时分别称两个操作数为源操作数(source)和目的操作数(destination)。
尽管在指令执行前这两个操作数都是输入操作数,但指令执行后将把运算结果存放到目的操作数的地址之中。
8086的大多数运算型指令就采用这种二地址指令。
第3章 8086指令系统-1寻址方式
第章指令系统第3章8086指令系统1RAM硬盘ROM2机器码助记符说明AL10110000 00000111MOV AL,07H 把立即数07H 送累加器AL07H 00000100ADD AL,0AH 累加器AL 中的内容与立即数0AH 相加,结果在11H 00001010AL 中10100010MOV [07H],AL 把AL 中的内容存入[07H]11H00000111[],地址单元3第3章8086 指令系统机器语言是机器指令的集合。
机器指令就是一台机器可以机器指令就是台机器可以正确执行的命令,电子计算机的机器指令是一列二进制C 语言数字,计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动进行计Java 语言C++语言电子器件受到驱动,进行计算。
汇编语言机器语言汇编语言的主体是汇编指令,汇编指令和机器Basic 语言Pascal 语言指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。
4操作:(AX)(BX)•(AX)=(BX)•机器指令:1000100111011000•汇编指令:Mov AX,BX汇编指令,5编译器MOV AX,BX…………编令程序员汇编指令1000100111011000…………机器码6计算机•3.1 基本数据类型•3.2 8086指令格式•3.3 8086指令的操作数寻址方式•3.4 8086通用指令7000AH 0009H 0008H 1/0Bit0007H 0006H 0005H 0004HByte0003H 0002H Word0001H0000H8•整型(int )C 语言变量基本类型•字符型(char)•浮点型(float)d bl 指针类型•双精度浮点型(double )•无值型(void )数据类型•数组类型构造类型•结构类型•共用类型枚举型9•字符型:以11ASCII字符以个字节存放个码字符;•整型:以2到4个字节存放1个定点数,通常在PC机上位2个字节;•浮点型:以4个字节存放1个浮点数;•双精度浮点型:以8个字节存放1个浮点数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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寄存器中。