第3章 (1)寻址方式

合集下载

第三章 操作数的寻址方式

第三章 操作数的寻址方式

2
一、立即数寻址方式(P24)
直接把参与操作的数据写在指令中,是指令的一部分, 该数据称为立即数。操作数可以是各种数制下的数值(8位或16 位二进制数),也可以是带单引号的字符。 例如:MOV AX,2050H MOV AL,05H MOV AL,‘A’ 观察下面指令中的错误: MOV 05H,AL MOV BL,324D MOV CH,2050H 注意:1.立即数永远不能作目的操作数。 2.源操作数和目的作码
操作数
2、说明:
操作码:每条指令必有。 操作数:不同的指令其操作数的个数不同 例如: MOV AX,2050H
在上面的MOV指令中,MOV是操作码,AX和2050H是操作 数。其中: AX是目的操作数, 2050H是源操作数。该指令的 作用是将2050H存入寄存器AX中。
7
四、寄存器间接寻址方式(P27)
把参与操作数的偏移地址写在寄存器中,而操作数在内 存中。物理地址的计算需要利用段寄存器。 偏移地址(或有效地址)通过寄存器间接给出,可用的 寄存器只能为BX、BP、SI、DI。 段寄存器可以指定,也可以不指定。如果没有指定段寄 存器,则使用默认的寄存器(BP对应SS,其余3个对应DS) 例1: MOV [BX],2050H 目的操作数[BX]是寄存器间接寻址方式。 例2: MOV AX,[BP] 原操作数[BP]是寄存器间接寻址方式。
答案: ① MOV AX, [ARRAY+8] ② MOV SI, ARRAY+8 MOV AX ,[SI] ③ MOV SI,8 MOV AX ,[ARRAY+SI] ④ MOV BX,ARRAY MOV SI ,8 MOV AX,[BX][SI]
17
例4:指令MOV AX,[BX] [SI] ( 或写为MOV AX,[BX+SI] ) 若(DS)=2000H,(BX)=0500H,(SI)=0010H, (2050FH)=00H,(20510H)=12H,(20511H)=34H, (20512H)=56H。则: ①偏移地址为多少? ②物理地址为多少? ③指令执行完后AX为多少?

单片机指令系统-第3讲寻址方式

单片机指令系统-第3讲寻址方式

单片机指令系统-第3讲寻址方式单片机指令系统第 3 讲寻址方式在单片机的世界里,指令系统就像是指挥中心发出的一道道命令,而寻址方式则是决定这些命令如何找到它们的操作对象的关键。

简单来说,寻址方式就是告诉单片机去哪里找到它需要处理的数据。

这一概念对于理解和编写单片机程序至关重要。

首先,我们来谈谈直接寻址。

这就好比你直接知道某个东西放在哪个抽屉里,然后直接去那个抽屉拿。

在单片机中,直接寻址就是直接给出操作数所在的存储单元地址。

比如,指令“MOV A, 20H”,这里的“20H”就是一个直接地址,单片机能够直接找到 20H 这个存储单元,并把里面的数据送到累加器 A 中。

这种方式简单直观,但能访问的地址范围有限。

接下来是寄存器寻址。

想象一下,你把常用的东西放在身边的几个盒子里,需要的时候直接从盒子里拿。

在单片机里,寄存器就像是这些盒子,操作数存放在特定的寄存器中。

比如,“MOV A, R0”这条指令,就是把寄存器 R0 中的内容送到累加器 A 中。

由于寄存器的访问速度通常比内存快,所以这种方式能够提高程序的执行效率。

然后是寄存器间接寻址。

这有点像你知道东西在某个柜子里,但不知道具体在哪个抽屉,而柜子的钥匙在另一个地方。

在单片机中,寄存器里存放的不是操作数本身,而是操作数所在的地址。

比如,“MOVA, @R0”,此时 R0 中存放的是一个地址,单片机先根据 R0 中的地址找到操作数所在的存储单元,再把数据送到累加器 A 中。

再说说立即寻址。

这就像是东西直接摆在你面前,你一眼就能看到。

在指令中,操作数直接包含在指令里。

比如,“MOV A, 50H”,这里的“50H”就是立即数,单片机直接把 50H 这个数据送到累加器 A 中。

变址寻址也是一种重要的方式。

可以把它想象成有一本按照特定规律编号的书,你知道规律就能找到你想要的那一页。

在单片机中,通常是以 DPTR 或 PC 作为基址寄存器,以累加器 A 作为变址寄存器,通过两者的相加来确定操作数的地址。

第3章(1) 寻址方式和指令系统

第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章指令系统和寻址方式

第3章指令系统和寻址方式

(6) 基址变址寻址方式 基址变址寻址方式*
(BX) 有效地址 = + (BP) 指令格式: 指令格式: MOV MOV MOV (SI) (DI)
AX, [BX] [DI] AX, [BX+DI] AX, ES:[BX] [SI]
* 适于数组、字符串、表格的处理 适于数组、字符串、 * 必须是一个基址寄存器和一个变址寄存器的组合
• 寄存器操作数
– 寄存器的内容参加运算或存放结果。 寄存器的内容参加运算或存放结果。
• 存储器操作数
– 指内存某地址的字节、字、双字等是指令的处 指内存某地址的字节、 理对象, 理对象,这时必须把处理对象取出或送入相应 地址。 地址。
有效地址和段超越
• 存储单元的物理地址由两部分组成:段 存储单元的物理地址由两部分组成: 寄存器保存的段基值,偏移地址。 寄存器保存的段基值,偏移地址。 • 在8086/8088的各种寻址方式中,寻找存 的各种寻址方式中, 的各种寻址方式中 储单元所需的偏移地址,称为有效地址, 储单元所需的偏移地址,称为有效地址, 用EA表示。 表示。 表示 • 不同的寻址方式,组成有效地址 的各 不同的寻址方式,组成有效地址EA的各 部分内容也不一样,寻址方式主要是EA 部分内容也不一样,寻址方式主要是 如何计算与寻找的问题。 如何计算与寻找的问题。
汇编指令的书写形式
• 格式
[name] operation operand [;comment] – 名字项(name):可以是标号或变量,表示本 名字项( ):可以是标号或变量 ):可以是标号或变量, 语句的符号地址。 语句的符号地址。
• 标号在代码段中定义,后跟冒号。 标号在代码段中定义,后跟冒号。 • 变量在数据段或附加数据段中定义,后面不跟冒号。 变量在数据段或附加数据段中定义,后面不跟冒号 不跟冒号。 • 名字项组成:字母打头的字符串组成。包含字符 名字项组成:字母打头的字符串组成。 (A~Z,0~9,_,?,$,@等),如MainLoop, , , , , , 等),如 , Calc_long_sum。 。 • 单独的$或?有特殊含义,不能做符号名。 单独的 或 有特殊含义,不能做符号名。 有特殊含义 • 保留字不能用在名字项。 保留字不能用在名字项。

第三章操作数的寻址方式

第三章操作数的寻址方式

第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。

第3章节TMS320C54x数据寻址方式

第3章节TMS320C54x数据寻址方式
长立即数*(lk)寻址使用一个符号(符号地址) 或一个表示16位地址的立即数来指定数据存储空 间的一个地址。例如,把数据空间中地址为 BUFFER 单元中的数据传送到累加器 A,指令可 写为: LD *(BUFFER),A
返回本节

3.3 累加器寻址

累加器寻址是用累加器中的数值作为一个地址读 写程序存储器。共有两条指令可以采用累加器寻 址: READA
返回首页
3.2.1 数据存储器(dmad)寻址

使用数据存储器寻址的指令有:
MVDK Smem, dmad MVKD dmad, Smem MVDM dmad, MMR MVMD MMR, dmad

数据存储器寻址使用符号(符号地址)或一个表 示16位地址的立即数来指明寻址的数据存储单元 的16位绝对地址。例如:

程序存储器(pmad)寻址使用符号(符号地址)或一个 表示 16 位地址的立即数来给出程序空间的地址。例如, 把程序存储器中标号为 TABLE 单元中的值复制到 AR7 所 指定的数据存储器中去,指令可写为: MVPD TABLE,*AR7; 返回本节

3.2.3 端口地址(PA)寻址

使用端口地址的指令有:

LD
#0,ARP
;ARP=0(#k3)
LD
LD LD
#3,ASM
#50,DP #1234,A
;ASM=3(#k5)
;DP=50(#k9) ;A=1234(#lk)
返回首页
3.2 绝对寻址

3.2.1 数据存储器(dmad)寻址
3.2.2 程序存储器(pmad)寻址 3.2.3 端口地址(PA)寻址 3.2.4 长立即数*(lk)寻址

寻址方式

寻址方式

相对寻址是把程序计数器PC的内容加上指令格式中的形式D而形成操作数的有效。程序计数器的内容就是当 前指令的。“相对”寻址,就是相对于当前的指令而言。采用相对寻址方式的好处是程序员无须用指令的绝对编 程,因而所编程序可以放在内存的任何地方。 指令格式:MOV AX,[BX+1200H] 操作数物理 PA=(DS/SS)16H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp对于BX,SI,DI寄存器来说段寄存器默认为DS,对 于BP来说,段寄存器默认为SS
注意是否跳跃可能受到状态寄存器的操作数的控制,而跳跃到的分为绝对(由标记符直接得到)和相对(对 于当前指令的偏移量),跳跃的结果是当前指令修改PC程序计数器的值,所以下一条指令仍是通过程序计数器PC 给出。
操作数寻址
01
隐含寻址
02
立即寻址
03
直接寻址
04
间接寻址
06
相对
05
寄存器和寄 存器间接
变址
基址

这种类型的指令,不是明显地给出操作数的。而是在指令中隐含着操作数的。例如,单的指令格式,就不明 显地在字段中指出第2操作数的,而是规定累加寄存器AC作为第2操作数。指令格式明显指出的仅是第1操作数的D。 因此,累加寄存器AC对单指令格式来说是隐含。 如:DAA ;
指令的字段指出的不是操作数的,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指 令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。 如:MOV AX,#5678H注意:立即 数只能作为源寄存器的内容,加上变址寄存器的内容而形成操作数的有效。基址寻址的 优点是可以扩大寻址能力,因为与形式相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中 寻址。

第三章DSP指令寻址方式

第三章DSP指令寻址方式

DP值 0000 0000 0
偏移量 000 0000
数据存储器 第0页:0000h~007Fh
0000 0000 0 0000 0000 1
0000 0000 1 0000 00010
0000 00010 1111 1111 1
1111 1
~ ~ ~ ~
111 1111 000 0000 第1页:0080h~00FFh
址,而是将此地址(或寄存器)内容再作为地址。间接
寻址通过8个16位的辅助寄存器访问数据存储器。
1.1 立即寻址方式 在立即寻址方式中,指令字中包含指令所需 的一个常数。两种立即寻址方式为: 短立即寻址。用短立即寻址的指令将一个8位、9 位或13位的常数作为操作数。短立即寻址指令为 一个单指令字,并且有一个常数嵌在该指令中。 长立即寻址。用常立即寻址的指令将一个16位常 数作为操作数,从而需要两个指令字。该常数作 为第二个指令字被发送。这个16位字值可以是绝 对常数或二进制补码。
3.1 DSP指令寻址方式
也称为立即数寻址方式。
立即寻址:需要找的数据就在指令里,不需要存储器找, 直接寻址:即指令给出的是需要找的数的地址,按此地
址直接访问即可。直接寻址将指令字的7位与数据存储 器页指针(DP)的9位连接起来,形成一个16位数据存 储器地址。 间接寻址:即指令给出的既不是立即数,也不是直接地
下一个辅助寄存器 除了更新当前辅助寄存器的内容外,某些指令还可以指 明下一个辅助寄存器或下一个AR。当这条指令执行完 成后,这个寄存器就成为当前辅助寄存器。允许用于指 定下一个辅助寄存器的指令用新的值装载ARP。当ARP 用该值装载时,以前的ARP值被装入辅助寄存器指针缓 冲器(ARB)。 例1.6说明了下一个辅助寄存器的选择和其他间接寻址的 特点。 例1.6 选择新的当前辅助寄存器。 MAR *,AR1;向ARP装入1,指令执行后使得AR1成为 当前辅助寄存器 LT *+,AR2;AR2是下一个辅助寄存器。用AR1指定的 地址内容装载TREG,AR1内容加1,指令执行后使得 AR2成为当前辅助寄存器。 MPY *;TREG乘以AR2所指定的单元内容

计算机原理_3寻址方式和指令系统

计算机原理_3寻址方式和指令系统

计算机原理_3寻址方式和指令系统寻址方式和指令系统是计算机原理中非常重要的概念,它们决定了计算机能够进行的操作和数据的处理方式。

下面将从寻址方式和指令系统的概念、分类和特点三个方面详细介绍。

一、寻址方式在计算机中,寻址方式是指CPU访问内存中数据的方式。

常见的寻址方式包括直接寻址、间接寻址、变址寻址和相对寻址等。

1、直接寻址直接寻址是指通过给出数据的内存地址来访问数据。

在直接寻址中,指令中给出了待访问的内存地址,CPU直接从该内存地址中读取/写入数据。

2、间接寻址间接寻址是指通过寄存器中的地址来访问数据。

在间接寻址中,指令中给出了一个寄存器的编号,CPU将寄存器中的地址作为内存地址进行读取/写入操作。

3、变址寻址变址寻址是指通过给出基地址和偏移量来计算内存地址的方法。

在变址寻址中,指令中给出了一个基地址和一个偏移量,CPU通过将两者相加来得到最终的内存地址进行操作。

4、相对寻址相对寻址是指通过给出相对于指令计数器的偏移量来计算内存地址的方式。

在相对寻址中,指令中给出了一个偏移量,CPU将偏移量与指令计数器相加来得到最终的内存地址。

二、指令系统指令系统是指计算机可以执行的指令的集合。

根据指令的类型和功能划分,指令系统可以分为以下几种类型。

1、数据传输指令数据传输指令用于在CPU和内存、寄存器之间传输数据。

例如,将内存中的数据传送到寄存器中或将寄存器中的数据传送到内存中等。

2、算术指令算术指令用于进行数值运算,如加、减、乘、除等。

这些指令可以对寄存器或内存中的数据进行算术运算,并将结果存放在寄存器或内存中。

3、逻辑指令逻辑指令用于进行逻辑运算,如与、或、非等。

这些指令可以对寄存器或内存中的数据进行逻辑运算,并将结果存放在寄存器或内存中。

4、控制指令控制指令用于控制程序的执行流程,如跳转、条件分支等。

这些指令可以根据条件改变程序的执行顺序或跳转到指定的地址执行。

指令系统的设计需要考虑指令的种类、格式、寻址方式和作用等因素。

第三章(1)-寻址方式

第三章(1)-寻址方式

MOV指令的功能是将源操作数src传送至目的操作数 dest,例如:
MOV MOV MOV MOV MOV
AL,05H BX,AX AX,[SI] AX,[BP+06H] AX,[BX+SI]
;AL←05H ;BX←AX ;AX←DS:[SI] ;AX←SS:[BP+06H] ;AX←DS:[BX+SI]
张永林-微机原理与接口技术电子讲稿-2010版
预习要求与提示:
n n
数据传送类指令 主要从下面4个方面入手:功能、支持的寻 址方式、对标志的影响、隐含约定
立即数寻址的功能
立即数寻址的执行
张永林-微机原理与接口技术
5
第三章(1)-寻址方式
2011/4/6
寄存器寻址的功能
寄存器寻址的执行
直接寻址的功能
有效地址 = BX/BP + SI/DI + 8/16位位移量
2.
注意操作数 所在的逻辑段。BX默认的在数据 段DS, BP默认的在堆栈SS。可使用段超越 前缀改变。
n
段地址对应BX基址寄存器默认是DS,对 应BP基址寄存器默认是SS;可用段超越 前缀改变
张永林-微机原理与接口技术电子讲稿-2010版
张永林-微机原理与接口技术
1
第三章(1)-寻址方式
2011/4/6
第3章
第3章
指令的助记符格式
操作码
n
示例
传送指令MOV的格式
MOV dest,src ;dest←src
n
演示
操作数1,操作数2
;注释
n
n
操作数2,称为源操作数 src,它表示参 与指令操作的一个对象 操作数1,称为目的操作数 dest,它不 仅可以作为指令操作的一个对象,还可 以用来存放指令操作的结果 分号后的内容是对指令的解释

第3讲_1 寻址方式

第3讲_1 寻址方式
15
⑤基址变址寻址(2)
基址变址寻址的格式: [BX+SI+位移量] [BX+DI+位移量] [BP+SI+ [BP+SI+位移量] [BP+DI+位移量] ] [BP+DI+ ] [BX+SI] [BX+DI] [BP+SI] [BP+DI] 错误的写法: [BX+BP] [SI+DI] 位移量的范围: 补码表示的8位或16位 (-128~+127,-32768~+32767)
3.3 寻址方式
3.3.1 3.3.2 3.3.4 3.3.5 操作数的种类 寻址方式 段更换和段跨越 有效地址的计算时间
1
3.3.1 操作数的种类
(1) 立即操作数: 指令要操作的数据在指令代码中, MOV AL,10H ;指令码B010. (2) 存储器操作数:指令要操作的数据在存储器(内 存)中, MOV AL,[1234H]; 指令码A03412. (3)寄存器操作数:指令要操作的数据在CPU的寄存 器中, MOV AL,BL; 指令码88D8. (4)I/O端口操作数, IN AL,20H; 指令码E420.
假定 DS=1000H, SS=2000H, BP=0100H, BX=0100H, 如下指 令在执行完后的结果分别是什 么? ① MOV AX,[BX+100H] ② MOV AX,[BP+100H]
19
寻址方式中不能出现的情况
立即数只能用于源操作数寻址 除源操作数为立即寻址方式外,其中一个操 作数的寻址方式必须是寄存器直接寻址,即 两个操作数不能同时为存储器操作数 例如 MOV data1,12h MOV data1,data2 错

第三章操作数的寻址方式

第三章操作数的寻址方式
(4)基址变址寻址: lea bx,num mov si,4 mov dx,[bx][si]
P33 1、2、3、5、6(单数)、
图示
1、直接寻址
例:指令:mov bx,es:[1234h],(es)=1000h, (11234h)=1234h。问该指令执行后,bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
1、直接寻址
要点:
地址也常用内存变量名来表示,书写格式:v_1或 [v_1]。
综合
例4:如图所示,取第三个字数 据→(dx) 解:取第3个数据,其偏移量: num+3 (1)直接寻址: mov dx,num+4 ;num为字变量 (2)寄存器间接寻址: lea bx,num+4 mov dx,[bx]
综合
(3)寄存器相对寻址: mov si,4 mov dx,num[si]
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
寄存器寻址(reg)
指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号)的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: 8位寄存器有:ah、al、bh、bl、ch、cl、 dh和dl。 16位寄存器有:ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中varw,varb是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al

第3章_1寻址方式剖析

第3章_1寻址方式剖析

MOV AX, 0102H
2020/10/7
;AX←0102H
演示 13
1、立即数寻址方式
规定:
(1)立即数只能为整数。 (2)立即数只能作为源操作数,不能作为目的操作数。
例:MOV AX, 1A90H MOV AL, 80H
2020/10/7
14
2、寄存器寻址方式
操作数存放在CPU的内部寄存器reg中,而寄 存器名由指令指出:
8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP
4个段寄存器seg: CS、DS、SS、ES
寄存器名表示其内容(操作数)
MOV AX, BX
;AX←BX
演示
2020/10/7
15
2、寄存器寻址方式
例:MOV DS, AX MOV AH, BL
10
寻Hale Waihona Puke 方式3. 在内存的数据区中 操作数部分—操作数的地址:内存单元地址。
(段内偏移量,有效地址EA) 物理地址 =段基址×16+段内偏移量
段内偏移量可以由几个部分组成,也称为有效 地址EA。 EA=[基址寄存器]+[变址寄存器]+偏移量
2020/10/7
11
操作数寻址方式
2020/10/7
12
1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式(基址/变址寻址) 4、基址变址寻址方式 5、相对基址变址寻址方式
2020/10/7
17
(1)直接寻址方式
有效地址在指令中直接给出 默认的段地址在DS段寄存器,可使用段超越前
缀改变 用方括号包含有效地址,表达存储单元的内容

单片机指令系统-第3讲寻址方式

单片机指令系统-第3讲寻址方式

单片机指令系统-第3讲寻址方式单片机指令系统第 3 讲寻址方式在单片机的世界里,指令系统就像是它的“语言”,而寻址方式则是这门语言中的重要语法规则。

理解了寻址方式,我们就能更加高效、准确地编写单片机程序,让单片机按照我们的意愿去工作。

什么是寻址方式呢?简单来说,寻址方式就是寻找操作数的方式。

在单片机执行指令的过程中,需要对各种数据进行操作,而这些数据可能存放在不同的地方,比如寄存器、内存单元等等。

寻址方式就是告诉单片机如何找到这些数据。

常见的寻址方式有以下几种:一、立即寻址立即寻址是最简单直观的一种寻址方式。

在这种方式下,操作数直接包含在指令中。

例如,指令“MOV A, 50H”中,“50H”就是一个立即数,单片机直接将这个数值赋给累加器 A。

这种方式的优点是指令执行速度快,因为操作数就在指令中,不需要额外的时间去寻找。

但是,由于指令长度有限,能表示的立即数范围也有限。

二、直接寻址直接寻址就是直接给出操作数所在的内存单元地址。

比如,指令“MOV A, 30H”,这里的“30H”就是一个内存单元的地址,单片机从这个地址中取出数据并赋给累加器 A。

直接寻址方式可以访问片内 RAM 的 00H 7FH 单元以及特殊功能寄存器(SFR)。

使用直接寻址可以方便地对特定的内存单元进行操作,但需要注意的是,直接寻址的范围相对有限。

三、寄存器寻址寄存器寻址是指操作数存放在寄存器中。

例如,指令“MOV A, R0”,就是将寄存器 R0 中的内容传送到累加器 A 中。

由于寄存器的存取速度比内存快得多,所以寄存器寻址方式可以提高指令的执行效率。

在单片机中,通常有多个通用寄存器可供选择,程序员可以根据需要灵活使用。

四、寄存器间接寻址寄存器间接寻址是通过寄存器中的内容作为地址来访问内存单元。

比如,指令“MOV A, @R0”,这里的 R0 中存放的不是操作数本身,而是操作数所在的内存地址。

单片机先从 R0 中取出地址,然后再从这个地址中取出数据赋给累加器A。

第3章_1 寻址方式

第3章_1 寻址方式

16位不允许使用 、CX、DX存放 位不允许使用AX、 、 存放 存放EA 位不允许使用 × MOV AX, [CX]
3.2 寻址方式 .
存储器寻址
例1 MOV AX,[BX] , (DS)=2000H,(SS)=1000H,(BP)=120H ) , ) , ) (BX)=100H,(AX)=1234H,(20100H)=5678H ) , ) , ) 偏移地址EA=(BX)=100H ( ) 偏移地址 物理地址PA= (DS) × 16 +(BX)=20000H+100H=20100H 物理地址 ) ( ) 内 存 (DS) 2000H BH EA=(BX) 01H 2000H 20100H BL 00H 0H ×16
AL 05H
64H
...
AH 30H
AL 64H
... 操作码 指 令 代 码 段
05H
30H
...
...

MOV MOV MOV
AL,05H , AX,3064H , 3,AL , MOV AH, 3064H
立即数不能做目的操作数 源、目的操作数的字长一致 目的操作数的字长一致
3.2 寻址方式 .
(AX) = 5678H
AH AL
0CH 52H
56H
78H 20100 78H 20101 56H
+
PA
3.2 寻址方式 .
存储器寻址 3. 基址寻址
为:基址寄存器+位移量 基址寄存器 位移量 •16位偏移地址 位偏移地址EA 位偏移地址 数据段( ) 数据段(DS)EA=BX+8或16位移量 或 位移量 堆栈段( ) 堆栈段(SS)EA=BP+8或16位移量 或 位移量 MOV MOV MOV MOV AX, [BX] ;源操作数在数据段 AX, [BX+3] AX, 3[BX] [BP],DI ;目的操作数在堆栈段 ,

第三章(寻址方式)

第三章(寻址方式)
MOV AX , [ BX ] MOV AX , ES: [ BX ] MOV AX , [ BP ] PA = 16d × ( DS ) + ( BX ) PA = 16d × ( ES ) + ( BX ) PA = 16d × ( SS ) + ( BP )
* 不允许使用AX、CX、DX 存放 EA MOV AX , [ CX ] * SRC 和 DST 的字长一致 MOV DL , [ BX ] MOV DX , [ BX ] * 适于数组、字符串、表格的处理
(3) 直接寻址方式 * —— 有效地址 EA 由指令直接给出
例:MOV AX , [ 2000H ] EA = 2000H , 假设 (DS) = 3000H , 那么 PA = 32000HAH ALFra bibliotek3050
32000
50H 30H (AX) = 3050H
* 隐含的段为数据段 DS * 可使用段跨越前缀
loop next
(3) 寄存器相对寻址
mov cx, count mov si, 0 next : mov dl, string [ si ] mov ah, 2 int 21h inc si loop next
; mov dl, [ string + si ] ; 显示一个字符 ; mov cx, 17
访问存储器的方式
取指令 堆栈操作 一般数据访问 BP 作为基址的寻址 串操作的源操作数 串操作的目的操作数
默认的 段寄存器
CS SS DS SS DS ES
可跨越的 段寄存器
无 无 CS ES SS CS DS ES CS ES SS 无
偏移地址
IP SP 有效地址 EA BP SI DI
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(6) 基址变址寻址方式*
(BX) 有效地址 = + (BP) 指令格式: MOV (SI)
(DI)
AX, [BX] [DI]
MOV
MOV
AX, [BX+DI]
AX, ES:[BX] [SI]
* 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合
MOV AX, [BX] [BP] MOV AX, [SI] [DI]
(3) 直接寻址方式* — 有效地址EA由指令直接给出
例:MOV AX, [ 2000H ] EA=2000H, 假设(DS)=3000H, 那么PA=32000H
AH AL
30
50
32000
50 30
(AX) = 3050H
* 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES: [2000H] * 操作数地址可由变量(符号地址)表示, 但要注意
输出指令 OUT (CPU I/O)
长格式:
OUT PORT, AL (字节) OUT PORT, AX (字) 执行操作:( PORT ) (AL) (字节) ( PORT+1, PORT ) (AX)(字) 短格式: OUT DX, AL (字节) OUT DX, AX (字) 执行操作:( (DX) ) (AL) (字节) ( (DX)+1, (DX) ) (AX)(字)
例:Sound程序
设备控制寄存器
端口61H 控制其它外部设备 1 1/0 0 0
2号定时器门控
与 门 放大器
mov in and sound: xor out mov Wait1: loop dec jne
dx, 100 al, 61h al,11111100b al, 2 ;1 0 61h, al ;ON cx, 140h ;脉宽 wait1 dx sound
* 不影响标志位 * 字节表格(长度不超过256) 首地址 (BX) * 需转换的代码位移量 (AL)
地址传送指令 有效地址送寄存器指令: LEA REG, SRC 执行操作: (REG) SRC 指针送寄存器和DS指令: LDS REG, SRC 执行操作: (REG) (SRC) (DS) (SRC+2)
进栈指令:
执行操作:
PUSH SRC
(SP) (SP) – 2 ( (SP)+1, (SP) ) (SRC)
出栈指令:
执行操作:
POP DST
(DST) ( (SP)+1, (SP) ) (SP) (SP) + 2
堆栈:‘先进后出’的存储区,段地址存放在SS中,
SP在任何时候都指向栈顶,进出栈后自动修改SP。 注意:
( 7 ) 相对基址变址寻址方式
有效地址 =
(BX) (BP)
+
(SI) (DI)
+
8位 16位
位移量
MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI]

MOV AX, [MASK+BX+SI]
段寄存器的使用规定
访问存储器的方式
取指令 堆栈操作
默认的 段寄存器
* * * * 堆栈操作必须以字为单位。 不影响标志位 不能用立即寻址方式 PUSH 1234H DST不能是CS POP CS
例:假设 (AX) = 2107 H , 执行 PUSH AX
低地址 (SP) (SP)
07H 21* * *
* * * *
注意: * 不影响标志位 * 前256个端口号00H~FFH可直接在指令中指定(长格式) * 如果端口号 256,端口号 DX(短格式)
例: IN AX, 28H MOV DATA_WORD, AX
例:
MOV DX, 3FCH IN AX, DX
OUT 5, AL
例:
例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL, 27H TEST AL, 00000100B JNZ ERROR ;若第2位为1,转ERROR处理
1
OFF
ON
换码指令:XLAT 或 XLAT OPR 执行操作:(AL) ( (BX) + (AL) )
例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE
指令执行后 (AL)=33H
注意:
(DS)=F000H
TABLE (BX) (AL) = 3 30 H 31 H 32 H 33 H F0040 F0041 F0042 F0043
第3章 80x86的指令系统和寻址方式
指令系统
一组指令的集合 指令
操作码 操作数 ... 操作数
寻址方式
与数据有关的寻址方式 与转移地址有关的寻址方式
1. 8086的寻址方式 与数据有关的寻址方式:以 MOV 指令为例
• • • • 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址
MOV AX , 3069H MOV AL , BH MOV AX , [ 2000H ] MOV AX , [ BX ]
相继二字 寄存器、DS
指针送寄存器和ES指令: LES REG, SRC 执行操作: (REG) (SRC) (ES) (SRC+2)
相继二字 寄存器、ES
例:LEA BX, [BX+SI+0F62H]
LDS SI, [10H] LES DI, [BX]
MOV BX, TABLE 40 H 00 H 00 H 30 H

• •
寄存器相对寻址
基址变址寻址 相对基址变址寻址
存储器寻址
MOV AX , COUNT [ SI ]
MOV AX , [ BP ] [ DI ] MOV AX , MASK [ BX ] [ SI ]
(1) 立即寻址方式* —— 操作数在指令中给出
指令格式: MOV AL, 5
MOV AX, 3064H
; mov dl, [string+si]
; 显示一个字符
; 循环指令
( 4 ) 基址变址寻址
mov mov mov Next : mov mov int inc loop cx, count bx, offset string si, 0 dl, [bx] [si] ah, 2 21h si next
MOV AL, ‘A’
MOV 40H, AL
* 只能用于 SRC 字段
* SRC 和 DST 的字长一致
MOV AH, 3064H
(2) 寄存器寻址方式* — 操作数在指定的寄存器中 MOV AX, BX
MOV AL, BH
MOV AX, 3064H
* * *
字节寄存器只有 AH AL BH BL CH CL DH DL SRC 和 DST 的字长一致 CS 不能用 MOV 指令改变 MOV AH, BX MOV CS, AX
……
…… RET 例: PUSH AX PUSH BX PUSH CX …… POP POP CX BX ;其间用到AX、BX、CX
; 后进先出
POP
AX
交换指令: XCHG OPR1, OPR2 执行操作: (OPR1) (OPR2) 注意: * 不影响标志位
* 不允许使用段寄存器
例:XCHG BX, [ BP+SI ]
; mov cx, 17 ; string的偏址 bx
; 显示一个字符 ; 循环指令
( 3 ) 寄存器相对寻址
mov mov Next : mov mov int inc loop cx, count si, 0 dl, string[si] ah, 2 21h si next
; mov cx, 17
* 不允许使用AX、CX、DX 存放 EA
MOV AX, [CX]
* SRC 和 DST 的字长一致
MOV DL, [ BX ]
MOV DX, [ BX ]
; [BX]指示一个字节单元
; [BX]指示一个字单元
* 适于数组、字符串、表格的处理
(5) 寄存器相对寻址方式*
(BX) (BP) 8位
进栈方向
高地址
PUSH AX 执行前
PUSH AX 执行后
例: POP BX
低地址 (SP)
07H
21H
07H
21H
* * * *
* * * *
(SP)
* * * *
* * * *
出栈方向
高地址
POP BX 执行前
POP BX 执行后
(BX) = 2107H
例: PUSH DS SUB AX, AX PUSH AX
; mov cx, 17 ; string的偏址 bx ; mov dl, [bx+si] ; 显示一个字符 ; 循环指令
( 5 ) DOS 显示字符串功能
mov mov int dx, offset string ah, 9 21h
; string的偏址 dx ; lea dx, string ; 显示一串字符
COUNT
DATA
DW
ENDS
17
( 1 ) 直接寻址
mov dl, string mov ah, 2 int 21h mov dl, string+1 mov ah, 2 int 21h : :
; 显示字符‘H’
; 显示字符‘A’
( 2 ) 寄存器间接寻址
mov cx, count mov bx, offset string Next : mov dl, [bx] mov ah, 2 int 21h inc bx loop next
相关文档
最新文档