第3章_指令系统与寻址方式1
第三章 MCS-51单片机的寻址方式和指令系统

由此可把数据传送指令分成三部分
(一)内部数据传送(通用传送指令)
1.以A为目的操作数
MOV A,Rn MOV A,@Ri ;A← (Rn) ;A←((Ri))
双字节
11101rrr 1110011i
MOV A,direct ;A←(direct) 11100101 direct
MOV A,#data ;A←#data 例: MOV A,@R1 若(R1)=20H,(20H)=62H 结果:(A)=62H 11100100 data
指令MOVC A,@A+DPTR;执 行示意图
结果:(ACC)=64H
六、相对寻址
以当前PC的内容为基准,加上指令给出的 偏移量(rel)形成新的PC值(转移地址) 的寻址方式。
转移地址=目的地址 =当前(PC)+rel
目的地址=PC当前值十rel 目的地址=转移指令的PC值+2(或3)十rel 目的地址=转移指令地址+转移指令字节数+rel
单周期:64 双周期:45 四周期:2
若fosc=12MHz, 大多指令执行 仅1μs
按照指令的功能分5大类
一、数据传送类指令(29条) 二、算术运算类指令(24条) 三、逻辑操作类指令(24条) 四、控制转移类指令(17条) 五、位操作类指令 (17条)
在描述指令系统的功能时,常用符号介绍:
@——间址符号,如@Ri,@DPTR 13. / ——位操作数的前缀,表示对该位操作 数取反,如/bit。 14. (×)——由×寻址的单元中的内容。 15. ((X))——由X的内容作为地址的存 储单元的内容。 16. ← ——箭头右边的内容取代箭头左边的 内容。
12.
一、数据传送类指令(29条)
第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章(1) 寻址方式和指令系统

EA的组成不同,寻找其中的操作数的方式也随之不同。如何寻找操作数 的有效地址,进而找到所需操作数的方式就是寻址方式 因为EA的组成方式都体现在指令中,故寻址方式也可以说是在指令中获得 操作数所在地址的方法。
3.1 Pentium的寻址方式
• 指令的两个问题
– 指出进行什么操作 – 涉及的操作数和操作结果放在何处
在这种寻址方式中,操作数是在存储器中,但是,操作 数的地址的16位偏移量包含在以下四个寄存器SI、DI、 BP、BX之一中。这又可分成两种情况: 1、 BX、SI、DI间址时以DS为默认段地址; 例:MOV AX,[SI] 2、BP间址时以SS为默认段地址。 例:MOV AX,[BP]
医药信息工程学院 何永玲
二、操作数存在方式
在微型计算机中,操作数可能以以下四种方式存在:
• 操作数包含在指令中——即指令的操作数场就包含着操作数本身。
MOV AX, 1234 ; ADD AL, 2
• 操作数包含在CPU的某一个内部寄存器中—— 这时指令中的操作数场是
CPU内部 寄存器的一个编码。
MOV DS, AX
• 操 作 数 在 内 存 的 数 据 区 中 —— 这 时 指 令 中 的 操 作 数 场 包 含 着 此 操 作 数 的
医药信息工程学院 何永玲
3.2.2 算术运算指令(1-P88)
– 不带进位位的加法指令ADD
比如: ADD ADD ADD ADD 比如: ADC ADC ADC CX,1000H ;CX=CX+1000h DI,SI [BX+DI],AX EAX,[BX+2000H]
• 无符号数和有符号数采用同一套加法指令及减法 所有算术运算指令均影响状态标志。 指令有两个条件:
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 ;通用寄存器和段寄存器之间的 传送
微机原理第3章-指令系统

▲按给出偏移地址方式的不同,分为以下5种: 寄存器间接寻址 寄存器相对寻址 基址加变址寄存器 相对基址加变址寄存器 MOV AL, [ BX ] MOV AL, [ BX + 10H ] MOV AL, [ BX + SI ] MOV AL, [ BX + SI + 10H ]
(1)寄存器间接寻址
寄存器寻址方式的操作数是寄存器的值,指令中直接 使用寄存器名,包括8位或16位通用寄存器和段寄存器。可 使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、 BP;其中:AX、BX、CX、DX可分成两8位使用。
例: MOV AX,CX
;(AX)
(CX)
INC CX
;(CX)
(CX)+1
3.直接寻址(Direct Addressing)
0002
AH
AL
默认段寄存器的关系: ① 使用BX、SI、DI,默认段寄存器为DS
(BX)
PA = ( DS )×10H + (SI) (DI)
② 使用BP,默认段寄存器为SS PA = ( SS )×10H + ( BP )
使用BX、SI、DI的寄存器寻址,默认段寄存器为DS
寄存器组 AH AL BH BL CH CL DH DL SI DI BP SP AX BX CX DX DS ES SS CS IP 地 址 加 法 器
运 算 器
控制总线CB
码
器
PSW标志 寄存器
执行部件控制电路
CPU
总线
内存
例: MOV AX , [ BX + SI ]
若 ( DS ) = 4000H
( BX ) = 2000H ( SI ) = 100H 则内存操作数的物理地址为:
计算机原理_3寻址方式和指令系统

计算机原理_3寻址方式和指令系统寻址方式和指令系统是计算机原理中非常重要的概念,它们决定了计算机能够进行的操作和数据的处理方式。
下面将从寻址方式和指令系统的概念、分类和特点三个方面详细介绍。
一、寻址方式在计算机中,寻址方式是指CPU访问内存中数据的方式。
常见的寻址方式包括直接寻址、间接寻址、变址寻址和相对寻址等。
1、直接寻址直接寻址是指通过给出数据的内存地址来访问数据。
在直接寻址中,指令中给出了待访问的内存地址,CPU直接从该内存地址中读取/写入数据。
2、间接寻址间接寻址是指通过寄存器中的地址来访问数据。
在间接寻址中,指令中给出了一个寄存器的编号,CPU将寄存器中的地址作为内存地址进行读取/写入操作。
3、变址寻址变址寻址是指通过给出基地址和偏移量来计算内存地址的方法。
在变址寻址中,指令中给出了一个基地址和一个偏移量,CPU通过将两者相加来得到最终的内存地址进行操作。
4、相对寻址相对寻址是指通过给出相对于指令计数器的偏移量来计算内存地址的方式。
在相对寻址中,指令中给出了一个偏移量,CPU将偏移量与指令计数器相加来得到最终的内存地址。
二、指令系统指令系统是指计算机可以执行的指令的集合。
根据指令的类型和功能划分,指令系统可以分为以下几种类型。
1、数据传输指令数据传输指令用于在CPU和内存、寄存器之间传输数据。
例如,将内存中的数据传送到寄存器中或将寄存器中的数据传送到内存中等。
2、算术指令算术指令用于进行数值运算,如加、减、乘、除等。
这些指令可以对寄存器或内存中的数据进行算术运算,并将结果存放在寄存器或内存中。
3、逻辑指令逻辑指令用于进行逻辑运算,如与、或、非等。
这些指令可以对寄存器或内存中的数据进行逻辑运算,并将结果存放在寄存器或内存中。
4、控制指令控制指令用于控制程序的执行流程,如跳转、条件分支等。
这些指令可以根据条件改变程序的执行顺序或跳转到指定的地址执行。
指令系统的设计需要考虑指令的种类、格式、寻址方式和作用等因素。
汇编语言第3章 指令系统和寻址方式

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)
寻址方式和指令系统

寻址⽅式和指令系统《微机原理》复习思考题第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的转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作数的物理地址:
或 PA2 = SS × 10H + EA2
第3章 8086/8088指令系统与寻址方式
【例】设 DS=3000H,BX=0100H,(30108H)=12H, 执行指令 MOV AL,8[BX]后,AL = ? ① 根据指令中给出的寄存器名、偏移量及寄存器 内容,得到存储单元的物理地址: DS × 16 + BX + disp = 30108H ② 把该内存单元中内容传送到AL中。 AL = 12H
78H
基址变址寻址示意图
…
堆栈段 788指令系统与寻址方式
7 相对基址变址寻址
采用相对基址变址寻址时,操作数的有效地址分为三 部分,一部分存于基址寄存器 BX 或 BP 中;一部分存于变址 寄存器 SI 或DI中;一部分为偏移量。指令中分别给出两个 寄存器名及8位或16位的偏移量。操作数的有效地址为: EA1 = BX + SI/DI + 8位/16位 disp 或 EA2 = BP + SI/DI + 8位/16位 disp 当基址寄存器选用 BX 时,数据隐含存于数据段中;当 基址寄存器选用 BP 时,数据隐含存于堆栈段中,即操作数 的物理地址为: PA1 = DS × 10H + EA1 或 PA2 = SS × 10H + EA2
当基址寄存器选用BX时,数据隐含存于数据段 中;当基址寄存器选用BP时,数据隐含存于堆栈段 中,即操作数的物理地址为:
PA1 = DS × 10H + EA1 或 PA2 = SS × 10H + EA2
第3章 8086/8088指令系统与寻址方式
【例】设 SS=3000H,BP=0100H,SI=5, (30105H)=78H,执行指令 MOV AL,[BP][SI]后, AL = ?
执行过程如图所示:
操作码 34H 12H
代码段
立即寻址示意图
…
第3章 8086/8088指令系统与寻址方式
2 寄存器寻址
寄存器寻址是指操作数存放在寄存器中,指令中给出寄 存器名。 AX DX 例:MOV DX ,AX ;DX ← AX 5678H 5678H 执行过程如图所示:
特点:
寄存器寻址示意图
第3章 8086/8088指令系统与寻址方式
第3章 8086/8088指令系统与寻址方式
3.1 概述 3.2 数据寻址方式 3.3 8086/8088指令系统
第3章 8086/8088指令系统与寻址方式
3.1 概 述
1. 指令
指令是对计算机发出的指示、命令。 指令系统是指微处理器能执行的各种指 令的集合。不同的微处理器有不同的指 令系统。
第3章 8086/8088指令系统与寻址方式
有效地址EA计算方法如下: SI DI BX BP SI作间址寄存器。 DI作间址寄存器。 BX作间址寄存器。 BP作间址寄存器。
EA=
物理地址PA计算方法如下: 物理地址 = DS × 10H + SI 或 DI 或 BX 或 物理地址 = SS × 10H + BP
(1)操作数在寄存器中,寄存器在CPU内部,指令执行时,操 作就在CPU的内部进行,不需要访问存储器来取得操作数,因 而执行速度快。 (2)寄存器寻址方式既可用于源操作数,也可用于目标操作数, 还可以两者都用寄存器寻址方式。
第3章 8086/8088指令系统与寻址方式
注意:
(1)当指令中的源操作数和目标操作数均为寄存器时,必 须采用同样长度的寄存器; (2)两个操作数不能同时为段寄存器; (3)目标操作数不能是代码段寄存器(CS)。 除以上两种寻址方式外,下面 5 种寻址方式的操作数 均在存储器中,统称为内存寻址方式。当采用内存操作数 时,必须注意双操作数指令中的两个操作数不能同时为内 存操作数。
操作码 00H 20H
…
代码段
12H 34H
数据段 AH AL 34H 12H AX
直接寻址示意图
第3章 8086/8088指令系统与寻址方式
4 寄存器间接寻址
寄存器间接寻址是把内存操作数的有效地址存 储于寄存器中,指令中给出存放地址的寄存器名。 8086/8088 中可用于间接寻址的寄存器有基址 寄存器BX、BP和变址寄存器SI、DI。为区别于寄存 器寻址,寄存器名要用“[]”括起。 例:MOV AX,[SI] ;AX ← (DS:SI+1,DS:SI)
第3章 8086/8088指令系统与寻址方式
执行过程如图所示:
DS=3000H BX=0100H disp=8 DS×10H+ BX+disp = 30108H 30108H 存储器
12H
寄存器相对寻址示意图
…
数据段 12H AL
…
第3章 8086/8088指令系统与寻址方式
说明: (1)偏移量是有符号数,8位偏移量的取值范围为: 00~FFH(即+127~-128);16位偏移量的取值范围 为:0000~FFFFH(即+32767~-32768)。 (2)IBM PC汇编允许用三种形式表示相对寻址,它 们的效果是一样的,如: MOV AX,[BX]+6 ;标准格式 MOV AX,6[BX] ;先写偏移值 MOV AX,[BX+6] ;偏移值写在括号内
说明:DS:2000表示内存单元地址; (DS:2000)表示地址是DS:2000的内存单元内容。
第3章 8086/8088指令系统与寻址方式
【例】设 DS=4000H,(42000H)=12H,(42001H)=34H,执行指 令 MOV AX,[2000H]后,AX = ? ① 根据指令中给出的有效地址得到存储单元的物理地址: DS × 16 + 2000H = 42000H ② 把该内存单元开始的两个字节的内容传送到AX中。低地 址单元内容传送到AL中,高地址单元内容传送到AH中。 AX = 3412H
第3章 8086/8088指令系统与寻址方式
【例】设 SS=2000H,BP=1000H,SI=0100H, (21105H)=78H,执行指令 MOV AL,5[BP][SI]后, AL = ? ① 根据指令中给出的寄存器名及寄存器内容,得 到存储单元的物理地址: SS × 16 + BP + SI + disp = 21105H ② 把该内存单元中内容传送到AL中。 AL = 78H
注意:不同的寄存器所隐含对应的段不同。采用SI、DI、 BX寄存器,数据存于数据段中;采用BP寄存器,数据存于堆 栈段中。
第3章 8086/8088指令系统与寻址方式
【例】设 DS=3000H,SI=2000H,(32000H)=50H, (32001H)=40H,执行指令 MOV AX,[SI]后,AX = ? ① 根据指令中给出的寄存器及寄存器内容得到存 储单元的物理地址: DS × 16 + 2000H = 32000H ② 把该内存单元开始的两个字节的内容传送到AX 中。低地址单元内容传送到AL中,高地址单元内 容传送到AH中。 AX = 4050H
指令中关于如何求出操作数 有效地址的方法称为寻址方式。 8086/8088给出了多种寻址方 式,根据操作数的类型及来源有 两大分类。
第3章 8086/8088指令系统与寻址方式
3.2 数据寻址方式
按操作数的类型 数据寻址√ 转移地址寻址。 按操作数的来源 直接给出(不需寻找)√
寄存器√
内存√
I/O
第3章 8086/8088指令系统与寻址方式
执行过程如图所示:
DS=3000H SI=2000H DS×10H+ SI = 32000H 32000H 存储器
50H 40H
寄存器间接寻址示意图
…
数据段 AH AL 40H 50H AX
…
第3章 8086/8088指令系统与寻址方式
5 寄存器相对寻址
在双操作数指令格式中,提供两个操 作数,分别称为目标操作数(前面的那个) 和源操作数(后面的那个)。当指令执行时, 两个操作数同时参与运算,并把运算结果 返回目标操作数中,也就是说,目标操作 数原有内容在运算后将会改变。
例如:MOV AX,BX
第3章 8086/8088指令系统与寻址方式
3.2 数据寻址方式
说明:直接寻址允许数据存于附加段、堆栈段、代码段,这 称为“段超越”,此时,需要段说明,如例(3)中,数据存 于附加段中,操作数物理地址为:ES×10H + 0100H。
第3章 8086/8088指令系统与寻址方式
执行过程如图所示:
存储器
…
DS=4000H × 10H 40000H + 2000H 42000H 42000H
寄存器相对寻址是把指定的寄存器内容作为变 址,与指令中给出的偏移量一起形成有效地址EA, 操作数在存储器中。选用不同寄存器,对应的段不 同,规律同寄存器寻址。 操作数的有效地址:
量) EA1 = SI/DI/BX + 8 位 disp/16 位 disp(disp 代表偏移
或
EA2 = BP + 8位disp/16位disp
操作码在 3.3 小节“指令系统” 中介绍。
第3章 8086/8088指令系统与寻址方式
操作数可以有一个、二个或更多,通常 分别称为单操作数指令(一地址指令)、双 操作数指令 (二地址指令)。 ADD CL,BH 是双操作数指令; INC AL 是单操作数指令。
第3章 8086/8088指令系统与寻址方式
第3章 8086/8088指令系统与寻址方式
6 基址变址寻址
采用基址变址寻址时,操作数的有效地址分为 两部分,一部分存于基址寄存器BX或BP中,另一部 分存于变址寄存器SI或DI中,指令中分别给出两个 寄存器名。操作数的有效地址为: