间接寻址及地址寄存器指令

合集下载

寄存器寻址指令

寄存器寻址指令

字节3 HIGH DATA
字节1
字节2
字节3 字节4 字节5 字节6
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 LOW HIGH DISP DISP LOW HIGH
操作码 D W MOD REG R/M 或 DATA 或 DATA DATA DATA
P67
MOV SP,BX
1000101 1 1 1
(3) POP 出栈操作指令
指令格式:POP 目标
指令功能:目标 ((SP)+1,SP)) SP (SP)+2
SS
栈顶
POP BX 56H 78H
POP AX 12H 34H
78H 56H
34H
12H
SP
栈底
堆栈(Stack)
POP指令
汇编语句
例子
说明
POP reg16 POP CX
16位寄存器
绝大多数双操作数指令,除非特别说明,目的操作数与源操作 数必须类型一致,否则为非法指令
MOV AL,050AH MOV AL,BX 寄存器有明确的字节或字类型,有寄存器参与的指令其操作数 类型就是寄存器的类型 对于存储器单元与立即数同时作为操作数的情况,必须显式指 明;byte ptr指示字节类型,word ptr指示字类型
栈底
汇编语句
例子
说明
PUSH reg16 PUSH BX
16位寄存器
PUSH mem16 PUSH WORD PTR[BX] 16位寻址方式
PUSH seg
PUSH DS
任何段寄存器
例:现场保护恢复
push ax push bx push ds ... pop ds pop bx pop ax

楼第4章指令系统习题解答

楼第4章指令系统习题解答

楼第4章指令系统习题解答习题解答:1.什么是寻址模式?8086/8088 CPU的寻址模式是什么?答:指令的寻址方式就是指获得操作数所在地址的方法。

8086/8088cpu指令的寻址方式可分为8种,为立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、基址变址相对寻址、隐含寻址。

2.指示源操作数和目标操作数在以下指令中的寻址方式(1)movax,[si]源操作数:寄存器寻址目的操作数:寄存器间接寻址(2)movdi,100源操作数:寄存器寻址目的操作数:立即寻址(3)mov[bx],al源操作数:寄存器间接寻址目的操作数:寄存器寻址(4)mov[bx+si],cx源操作数:基址变址寻址目的操作数:寄存器寻址(5)adddx,106h[si]源操作数:寄存器寻址目的操作数:寄存器相对寻址3.阅读以下说明(1)sti对(2)call1000h错(3)divax,dl错(4)shlal,4错(5)popax对(6)inal,[30h]错(7)inccs错(8)out40h,al对4.地址是根据已知的物理条件计算的。

已知:SS=1000h,ES=2000h,DS=3000h,CS=4000H,BX=5000h,di=1200h,BP=2300h(1)(2)(3)(4)(5)5.将SP的初始值设置为2400h,ax=4000H,BX=3600h,然后在执行pushax指令后,SP=?,执行pushbx和popax后,SP=?答:则执行指令pushax后,sp=2400h-2=23feh,再执行pushbx和popaxMovax,[2300h]计算公式:DS×16+2300hmov[BX][di],ax计算公式:DS×16+BX+diaddax,es:[2100h]计算公式:es×16+2100hsubdx,[BP+6]计算公式:SS×16+BP+6movax,[di]计算公式:DS×16+di后sp=23feh。

间接寻址和地址寄存器指令

间接寻址和地址寄存器指令

地址寄存器指令的缺点
缺乏灵活性
地址寄存器指令直接使用寄存器中的地址作为操作数的地址,这使 得程序在处理不同情况时缺乏灵活性。
可扩展性差
由于地址寄存器指令直接使用寄存器中的地址,当数据结构发生变 化时,可能需要修改整个程序以适应新的数据结构。
增加编程难度
由于地址寄存器指令直接使用寄存器中的地址,因此需要程序员手 动管理寄存器的值,这增加了编程的难度和出错的风险。
要点二
中断处理
在处理硬件中断时,地址寄存器指令 用于指定中断处理程序的入口地址。 当发生中断时,系统会自动跳转到该 地址执行中断处理程序。
要点三
直接内存访问( DMA)
在直接内存访问操作中,地址寄存器 指令用于指定要传输数据的起始地址 。通过设置地址寄存器的值,DMA 控制器可以直接在内存和设备之间传 输数据,而不需要CPU的干预。
随着云计算技术的普及,间接寻址和 地址寄存器指令将逐渐云端化,通过 将指令执行的结果存储在云端,实现 数据共享和远程控制,提高应用的灵 活性和可扩展性。
应用领域拓展
物联网
随着物联网技术的不断发展,间 接寻址和地址寄存器指令将在物 联网领域得到广泛应用,如智能 家居、智能农业等,通过指令控 制各种设备的运行,提高智能化 水平和生活质量。
指令格式
指令格式通常包括操作码、 寄存器号和可能的修饰符。
寄存器号指定了要使用的地 址寄存器,如AX、BX、CX 等。
操作码指定了要执行的操作 ,如加法、减法、乘法等。
修饰符可能包括间接寻址、 变址寻址等,用于指定如何 访问内存单元。
03
CATALOGUE
间接寻址与地址寄存器指令的比较
相似之处
选择依据
编程语言和指令集

间接寻址和直接寻址的区别

间接寻址和直接寻址的区别

间接寻址和直接寻址的区别寄存器直接寻址和间接寻址区别:⼀、存放的地址不同寄存器直接寻址指令直接包含有操作数的有效地址(偏移地址),即直接给出操作数地址。

⽽指令以寄存器中的内容为地址,该地址的内容为操作数,即寄存器间接寻址⽅式中,寄存器内存放的是操作数的地址,⽽不是操作数本⾝。

⼆、寄存器对象不同寄存器直接寻址对象为内部数据寄存器和特殊功能寄存器SFR。

⽽寄存器间接寻址对象为R0、R1、DPTR,⽤前⾯加@表⽰,如@R0、@R1、@DPTR。

扩展资料:直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存的地址ID 。

在通常情况下,操作数存放在中,所以,其将由数据DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么,操作数可存放在其它段。

直接寻址⽅式常⽤于处理内存单元的数据,其操作数是内存变量的值。

指令中直接给出操作数地址的寻址⽅式称为直接寻址。

寻址对象为:1、内部数据存储器,在指令中以直接地址表⽰;2、特殊功能寄存器SFR,在指令中⽤寄存器名称表⽰。

寄存器间接寻址⽅式:以寄存器中的内容为地址,该地址的内容为操作数的寻址⽅式称为寄存器间接寻址。

能够进⾏寄存器间接寻址的寄存器有:R0、R1、DPTR,⽤前⾯加@表⽰,如@R0、@R1、@DPTR。

寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。

由于内部数据存储器共有128字节,因此⽤⼀字节的R0和R1可间接寻址整个空间。

⽽外部数据存储器最⼤可达64K,仅R0或R1⽆法寻址整个空间,为此需要由P2端⼝提供外部RAM⾼8位地址,由R0或R1提供低8位地址,由此共同寻址64K字节范围。

也可⽤16位的DPTR寄存器间接寻址64K字节存储空间。

参考资料来源:寄存器直接寻址-百度百科寄存器间接寻址-百度百科。

8051单片机指令系统的7种寻址方式解析

8051单片机指令系统的7种寻址方式解析

8051单片机指令系统的7种寻址方式解析寻址方式:寻址就是寻找操作数的地址。

绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。

所谓寻址方式就是通过什么途径获取操作数的方式。

根据指令操作的需要,计算机总是提供多种寻址方式。

一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。

8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。

寄存器寻址寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。

采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。

例如:MOV A R1 这条指令的功能是把工作寄存器R1的内容传送到累加器A中,由于操作数在R1中,因此指令中指定了R1,也就得到了操作数。

寄存器寻址方式的寻址范围包括:工作寄存器组R0~R7,部分特殊寄存器ACC,B,DPTR 等。

直接寻址直接寻址:直接寻址就是在指令中直接给出操作数所在单元的真实地址。

这里给出的操作数直接地址为8位二进制地址。

程序中一般用十六进制数表示。

例如:指令MOV A,30H 把内部RAM单元30H中的数据传送给累加器A,指令中30H就是操作数的直接地址。

直接寻址方式的寻址范围包括:内部数据存储器低128单元,特殊功能寄存器。

特殊功能寄存器在指令的表示中除了可以以直接地址形式给出外,还可以以寄存器符号形式给出,如对累加器A,在指令中可使用其直接地址OEOH,也可使用其符号形式ACC。

立即寻址立即寻址:立即寻址方式就是实际操作数作为指令的一部分,在指令中直接给出,取指令时,可在程序存储器中直接取得操作数。

通常把出现在指令中的操作数称为立即数。

采用立即寻址方式的指令,在立即数前面加上。

MCS-51单片机寻址方式小结

MCS-51单片机寻址方式小结

MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结20__-08-2920:34:02|分类:エ程|标签:|字号大中小订阅MCS-51单片机指令系统共使用7中寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址等。

寻址方式定义操作数存放(1)通用寄存器R0~R7;寄存器于寄存器中,(2)部分专用寄存器,例如累加器A、寄存器B以寻址指令中给出数据指针DPTR等名寄存器存放操作数的(1)内部RAM中的低128地址单元,地址范围为内存单元地址00H~FFH;直接寻址直接写在指令中立即数操作数直接寻址写在指令中(2)专用寄存器。

专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。

源操作数为立即数,立即数前面必须加“#”号,以区别立即数和直接地址(1)内部RAM的低128字节。

对内部RAM的低128字节单元的间接寻址,只能使用R0或R1做间将存放操作接寻址寄存器,其通过形式为@Ri(i=0或1);MOVP1,#55HMOVDPTR,#20__HMOVR1,20HMOVA,P1CLRAMOVP1,R4MOVA,R1寻址区域指令举例数的内存单元(2)外部RAM的64K字节。

对外部RAM的64KMOVA,@R0寄存器的地址放在寄字节的间接寻址,使用DPTR作间接寻址寄存器,MOVXA,@DPTR间接寻址存器中,指令其形式为@DPTR;MOVXA,@R0中只给出该寄(3)外部RAM的低256字节。

外部RAM的低256存器字节是一个特殊的寻址区,除了可以使用DPTR作间接寻址寄存器外,还可以使用R0或R1作间接寻址寄存器将基寄存器变址寻址与变址寄存器的内容相(1)变址寻址是专门针对程序存储器的寻址方式,所以只能对程序存储器进行寻址,寻址范围为64K字节;MOVCA,@A+PC加,结果作为操作数的地址(2)变址寻址指令只有2条:MOVCA,@A+PCMOVCA,@A+DPTR将程序计数器PC的当前内容与指令相对寻址中的操作数相加,其结果作为跳转指令的转移地址(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,每个单元包括8个位,共按位进行的位寻址操作(2)特殊功能寄存器SFR中的11个寄存器可以位寻址,包括83个位计128个位,位地址为00H~7FH;MOVC,0D0HMOVC,0DOH.0MOVC,PMOVC,PSW.0专门为改变程序执行方向而设置的SJMP54H扩展阅读:课题MCS-51型单片机的寻址方式广告灯设计软件部分课题MCS-51型单片机的寻址方式授课方式:讲授教学目的:1.让学生了解汇编语言指令的格式;2.让学生掌握单片机指令的7种寻址方式。

10种寻址方式的定义

10种寻址方式的定义

10种寻址方式的定义寻址方式是指计算机系统用来定位并访问存储单元或数据的方式。

以下是常见的一些寻址方式:1.直接寻址(Direct Addressing):直接使用给定地址或指针来访问内存中的数据或指令。

2.间接寻址(Indirect Addressing):使用存储在一个地址或寄存器中的地址来访问数据,间接地定位到实际的数据存储位置。

3.相对寻址(Relative Addressing):使用相对于当前指令或指针的地址偏移量来定位数据,常用于访问数组或其他数据结构的元素。

4.基址寻址(Base Addressing):使用一个基址寄存器和一个偏移量来计算地址,定位到存储单元。

5.索引寻址(Index Addressing):通过一个索引寄存器的值和一个基地址来计算地址,以定位到数组或表中的元素。

6.变址寻址(Displacement Addressing):通过将寄存器中的地址与立即数相加或相减来计算目标地址。

7.间接相对寻址(Indirect Relative Addressing):通过使用相对地址来访问存储单元,但是该地址指向的是另一个存储位置的地址。

8.堆栈寻址(Stack Addressing):使用栈指针来访问栈中的数据,通常用于函数调用和返回时保存和恢复数据。

9.寄存器寻址(Register Addressing):直接使用CPU内部的寄存器地址来访问数据或指令。

10.变量寻址(Variable Addressing):在编程语言中,通过使用变量名来访问和操作变量的值。

这些寻址方式在不同的计算机体系结构和编程范式中有着不同的应用和特点,用于在计算机系统中有效地定位和访问数据。

七种寻址方式(寄存器间接寻址方式)

七种寻址方式(寄存器间接寻址方式)

七种寻址⽅式(寄存器间接寻址⽅式)
操作数在存储器中,操作数的有效地址⽤SI、DI、BX和BP等四个寄存器之⼀来指定,称这种寻址⽅式为寄存器间接寻址⽅式。

该寻址⽅式物理地址的计算⽅法如下:
寄存器间接寻址⽅式读取存储单元的原理如图所⽰。

在不使⽤段超越前缀的情况下,有下列规定:
若有效地址⽤SI、DI和BX等之⼀来指定,则其缺省的段寄存器为DS;
若有效地址⽤BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

例:假设有指令:MOV BX,[DI],在执⾏时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。

问执⾏指令后,BX的值是什么?
解:根据寄存器间接寻址⽅式的规则,在执⾏本例指令时,寄存器DI的值不是操作数,⽽是操作数的地址。

该操作数的物理地址应由DS和DI的值形成,即:
PA=(DS)*16+DI=1000H*16+2345H=12345H。

所以,该指令的执⾏效果是:把从物理地址为12345H开始的⼀个字的值传送给BX。

其执⾏过程如图所⽰。

8051单片机21个特殊功能寄存器和指令汇总

8051单片机21个特殊功能寄存器和指令汇总

MCS-51单片机21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。

在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。

在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。

这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。

它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。

自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。

该标志常用作程序分枝转移的判断条件。

2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3、PSW-----程序状态字。

这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。

它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。

8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。

这样就没事了。

七种寻址方式的寻址范围

七种寻址方式的寻址范围

七种寻址方式的寻址范围
寻址方式是指计算机的指令寻址方式,常见的有以下七种寻址方式:
1. 直接寻址:寻址范围是CPU的寻址范围,通常为2的n次方个单元,例如32位CPU的寻址范围为0~2^32-1。

2. 寄存器寻址:寻址范围是CPU的寄存器,通常寄存器的个数有限,例如32位CPU通常有16个通用寄存器,寻址范围为0~15。

3. 立即寻址:寻址范围是一个常数或者立即数,通常是一个字节或者一个字的大小,例如0~255。

4. 间接寻址:寻址范围是由另一个寄存器或内存单元中存储的地址指定的,通常是一个字节或一个字的大小。

5. 寄存器间接寻址:寻址范围是由两个寄存器的内容组成的地址。

6. 基址寻址:寻址范围是由一个基址寄存器和一个偏移量组成的地址,通常用于访问数组或者数据块等结构。

7. 相对寻址:寻址范围是相对于当前指令地址的一个偏移量,通常用于实现跳转或者分支等指令。

西门子PLC高级编程3_间接寻址及地址寄存器指令

西门子PLC高级编程3_间接寻址及地址寄存器指令

A DBX 0.0
从0字节的第0位开始扫描
L DB19.DBW4 从DB 19中装载数据字4
L “Values”.Number_1 符号访问变量
Number_1. DB19 具有变量名“Values”
A DB10.DBX4.7 从DB 10 的第4个字节的第7位开始扫描
SIMATIC S7
Siemens AG 2001. All rights reserved.
地址标识符
Bit 31=0: 内部区域 Bit 31=1: 交叉区域
字节地址(无符号整数)
位地址
地址标识符:
000 I/O
010 输出(PIQ) 100 DB寄存器中的数据 110 自有本地数据
001 输入(PII) 011 位(Bit)存储器 101 DB寄存器2中的数据(DI) 111 调用块的LD(本地数据)
Date: File:
2018/7/13 PRO2_04E.2
SITRAIN Training for
Automation and Drives
地址
I Q PIB PQB M T C DBX DIX L
变量直接寻址
存储单元位置 (示例)
37.4 27.7 655 653 55.0 114 13 2001.6 406.1 88.5
循环删除
// 将终端地址(DBW18)作为指针 // 传送到MD 40; // 将循环计数器值设置为10 // 传到MB 50中; // 装载初始值 // 传到DB50中; // 装载指针 // 并减去2个字节 // 然后再传回 // 到MD 40; // 装载循环计数器 // 减去2个字节,条件满足则跳转;
L 11 T MW 60

西门子plc的4种寻址方式

西门子plc的4种寻址方式

西门子plc的4种寻址方式立即寻址是对操作数是常数或常量的寻址方式,其特点是操作数值直接表示在指令中,出现在指令中的操作数称为立即数。

有些指令的操作数是唯一的,为简化起见,并不在指令中写出。

立即寻址方式可用来提供常数、设置初值等。

常数值可分为字节、字、双字型等数据。

CPU以二进制方式存储所有常数。

在指令中可用十进制、十六进制、ASCII码或浮点数形式来表示操作数。

立即寻址示例:SET 说明:把RLO置1OW W#16#320 将常量W#16#320与ACCU1“或”运算L 1352 把整数1352装入ACCU1L‘ABCD’把ASCII码字符ABCD装入ACCU1L C#100 把BCD码常数100(计数值)装入ACCU1AW W#16#3A12 常数W316#3 A12与ACCU1的低位相“与”,运算结果在ACCU1的低字中。

存储器直接寻址包括对寄存器和存储器的直接寻址。

在直接寻址的指令中,直接给出操作数的存储单元地址,包括寄存器或存储器的区域、长度和位置,根据这个地址就可以立即找到该数据。

例如,用MW200指定位存储区中的字,地址为200;MB100表示以字节方式存取,MW100表示存取MB100、MB101组成的字,MD100表示存取MB100~ MB103组成的双字。

在指令中,数据类型应与指令标识符相匹配。

直接寻址编程示例:A IO.0 说明:对输入位10.0进行“与”逻辑操作S L20.0 把本地数据位I20.0置“l”= M115.4 使存储区位M115.4的内容等于RLO的内容L IB10 把输入字节IB10的内容装入ACCU1T DBD12 把ACCU1中的内容传送给数据双字DBD12中。

存储器间接寻址简称间接寻址。

该寻址方式在指令中以存储器的形式给出操作数所在存储器单元的地址,也就是说该存储器的内容是操作数所在存储器单元的地址。

该存储器一般称为地址指针,在指令中需写在方括号“[]”内。

计算机组成原理课后答案(第二版)第七章

计算机组成原理课后答案(第二版)第七章

14. 设相对寻址的转移指令占两个 字节,第一个字节是操作码,第二个 字节是相对位移量,用补码表示。假 设当前转移指令第一字节所在的地址 为2000H,且CPU每取出一个字节便自 动完成(PC)+1PC的操作。试问当 执行“JMP *+8”和“JMP *-9”指令时, 转移指令第二字节的内容各为多少?
第 8 张幻灯片
11. 画出先变址再间址及先间址再变址的寻址过程 示意图。
解:1)先变址再间址寻址过程简单示意如下: 目 录 EA=[(IX)+A], (IX)+1IX
上一页 IR OP M
A
下一页
+1 退 出 IX
主存 操作数
ALU
IX:变址寄存器, 既可是专用寄存器, 也可是通用寄存器之一。
设一重间接
第 19 张幻灯片
目录
上一页 下一页 退出
(6)六种寻址方式中,立即寻址指 令执行时间最短,因为此时不需寻址;
间接寻址指令执行时间最长,因为 寻址操作需访存一次到多次;
相对寻址便于程序浮动,因为此时
操作数位置可随程序存储区的变动而改 变,总是相对于程序一段距离;
变址寻址最适合处理数组问题,因
为此时变址值可自动修改而不需要修改 程序。
EA =(PR)‖A (有效地址=页面地址“拼接”6位形式地址)
这样得到22位有效地址。
第 24 张幻灯片
目录
上一页 下一页 退出
通过基址寻址与段寻址获得实际地 址的区别:
1)基址寻址的基地址一般比较长 (存储器地址位数),位移量比较短 (=形式地址位数),相加后得到的有效 地址长度=基地址长度。此时主存不分段。
EA1= (PC) +8 = 2002H+0008H = 200AH

常用ARM指令

常用ARM指令

常用ARM指令及汇编包括1、ARM处理器寻址方式2、指令集介绍3、伪指令4、ARM汇编程序设计5、C与汇编混合编程ARM处理器寻址方式1、寄存器寻址:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作MOV R1, R2 ;R2->R1SUB R0, R1,R2 ;R1-R2 -> R02、立即寻址:立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令就取出了可以立即使用的操作数SUBS R0,R0,#1 ;R0-1 -> R0MOV R0,#0xff00 ;0xff00 -> R0注:立即数要以"#"为前缀,表示16进制数值时以"0x"表示3、寄存器偏移寻址:是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个操作数结合之前选择进行移位操作MOV R0,R2,LSL #3 ;R2的值左移3位,结果存入R0,即R0 = R2 * 8ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1寄存器偏移寻址可采用的移位操作如下(1)、LSL(Logical Shift Left)逻辑左移,寄存器中字的低端空出补0(2)、LSR(Logical Shift Right)逻辑右移,寄存器中字的高端空出补0(3)、ASR(Arthmetic Shift Right)算术右移,移位中保持符号位不变,即如果源操作数为正数,字高端空出补0,否则补1(4)、ROR(Rotate Right)循环右移,由字的低端移出的位填入高端空出的位(5)、RRX(Rotate Right eXtended by 1 place),操作数右移一位,左侧空位由CPSR的C 填充4、寄存器间接寻址:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针LDR R1,[R2] ;将R2中的数值作为地址,取出此地址中的数据保存在R1中SWP R1,R1,[R2] ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换5、基址寻址:将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。

8086七种寻址方式

8086七种寻址方式

8086/8088七种寻址方式(一)8086/8088寄存器组(二)8086/8088寻址方式(1)立即寻址方式操作数就包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。

这种操作数称为立即数,立即数可以是8位的也可以是16位的,如果立即数是16位的按“高高低低”的原则。

例如指令:MOV AX,1234H的存储和执行情况如下图:图中指令存放在代码段中,OP表示该指令的操作码部分再例如:MOV AL,5 则指令执行行,(AL)=05HMOV BX,3064H 则指令执行后,(BX)=3064H(2)寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。

对于16位操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP,和BP等:对于8位数,寄存器可以是:AL,AH,BL,BH,CL,CH,DL,DH。

这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度。

例如:MOV AX,BX如指令执行前(AX)=3064H,(BX)=1234H;则指令执行后,(AX)=1234H,(BX)保持不变例如:MOV SI,AXMOV AL,DH(3)直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。

操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。

如果采用段超越前缀,则操作数也可含在数据段外的其他段中。

如下图所示:在汇编语言指令中,可以用符叼地址代替数值地址。

如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。

如写成:MOV AX,[VALUE]也是可以的,两者是相等的。

如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE或MOV AX,ES:[VALUE]直接寻址方式常用于处理单个存储器变量的情况。

它可实现在64K字节的段内寻找操作数。

直接寻址的操作数通常是程序使用的变量。

寻址方式(有效地址的计算)

寻址方式(有效地址的计算)

寻址⽅式(有效地址的计算)
⼀条指令包括操作码和地址码。

有效地址:当操作数存放在主存单元中时,若指令中的地址码不能直接⽤来访问主存,则将这样的地址码称为形式地址,对形式地址进⾏⼀定的计算⽽得到的存放操作数的主存单元的地址。

(1)⽴即寻址的有效地址为指令所在地址;
(2)直接寻址给出的操作数地址就是操作数的有效地址;
(3)寄存器寻址也是⼀种“直接”寻址;
(4)间接寻址意味着给出的地址不是操作数地址⽽是存放操作数地址的主存单元的地址;由间接单元地址求操作数地址再求操作数;
(5)寄存器间址及其变型:寄存器地址(R)-操作数地址(M)-操作数;
(6)变址地址:将形式地址作为基准地址,将变址寄存器内容作为修改量(变址量);
(7)相对地址
(8)堆栈地址
例题:
例题:基址寄存器的内容是3000H,变址寄存器的内容是02b0H,指令地址为1FH(形式地址),当前正在执⾏的指令地址为3A00H。

问:变址寻址⽅式的有效地址(有效操作数/有效数据)是多少?
基址寻址的有效地址是多少?
相对寻址⽅式的有效地址是多少?
⽴即数寻址⽅式的有效地址是多少?
解:(1)基址地址有效地址 = 基址地址 + 指令地址 = 301FH;
3000H
+ 1FH
-------------
301FH
(2)变址地址有效地址 = 02b0H +1FH = 02cFH;
(3)相对有效地址 = 3A00H +1FH = 3A1FH;
(4) ⽴即数有效地址 = 3A00H;。

指令格式及寻址方式

指令格式及寻址方式
指令执行前,计算机各寄存器的内容为: DS=2000H,BX=2150H,T{ABLE=2060H,IP=2100H。操作数 存储单元的物理地址= } 16×DS+TABLE+BX=20000+2060+2150=241B0H 执行前,IP=2100H,(241B0H)=50H,(241B1H)=30H 执行后,IP=3050H 从此例看出,转移地址存放在数据段的相继两个存储单元 中,而存储单元的有效地址是TABLE和BX寄存器的内容相 加而成。注意,TABLE
特点:指令中直接给出操作数在段内的偏移量,段基 址隐含给出或用段前缀指明。该寻址方式适用于处理单个变
一般操作数存放在数据段,故操作数的物理地址为 物理地址=(DS)× 16D+ EA
=(段基址的寄存器)× 16 + 偏移地址
1.3与数据有关的寻址方式
【例3.4】已知(DS)=4000H,[42000H]=3355H MOV AX,[2000H]
1.3与数据有关的寻址方式
(3)寄存器相对寻址方式(register relative addressing 特点:操作数的有效地址是一个基址寄存器或变址寄存器的 内容和指令中指定的8位或16位位移量(即偏移量)之和。 适用于表格处理,修改基址或变址寄存器的内容来取得表格
{ 物理地址=16D×(DS){}+
ADD AX, BX
1.18086/8088的通用指令格式
对有操作数的指令,在执行指令所规定的操作之前首 先要寻找操作数。指令中的操作数字段实质上是指出参加 操作运算的操作数存放在何处。一般来说,操作数存放在 指令代码中,称为立即数;操作数存放在CPU寄存器中, 称为寄存器操作数;操作数存放在内存单元中,称为存储 器操作数; 操作数也可存放在I/O端口内。寻找这些操作 数的方式称为寻址方式,即指令中用于说明操作数或操作 数所在地址的方法。

8051单片机寻址方式

8051单片机寻址方式

8051单片机寻址方式8051单片机共有7种寻址方式。

寻址方式是指令中确定操作数的形式,用来确定操作数所处的存储空间。

1.立即寻址:在指令中直接给出操作数MOV A, #80H 8位操作数MOV A, #2000H 16位操作数2.直接寻址:指令中直接给出操作数地址(1)SFR,这一存储空间只能使用直接寻址MOV PSW, #50H(2)内部数据RAM,这一存储空间可以使用直接寻址和寄存器间接寻址MOV A, 30H3.寄存器寻址:以通用寄存器的内容作为操作数(通用寄存器包括A, B, DPTR, R0~R7)INC DPTR注意:A、B既是通用寄存器,也是SFR(直接寻址)4.寄存器间接寻址:以寄存器中的内容作为操作数的地址能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP区分内部数据RAM寻址和外部数据RAM寻址:外部数据RAM寻址指令上采用MOVX 对内部数据RAM寻址:使用8位的R0或者R1即可MOV @R0, A对外部数据RAM寻址:使用P2端口提供高8位地址,使用R0或者R1提供低8位地址;或者使用16位的DPTR提供地址MOVX A, @R1MOVX @DPTR, A5.变址寻址:以基址寄存器PC或者DPTR与变址寄存器A中的内容之和作为操作数的地址变址寻址只能对程序存储器中的数据进行寻址,由于程序存储器是只读的,因此变址寻址只有读操作,指令上采用MOVCMOVC A, @A+DPTRMOVC A, @A+PC6.相对寻址:用于修改PC的值,使得PC加上指令中给出的一字节的偏移量由于转移指令有两字节和三字节这两种形式,因此偏移量的范围分别为-126~+129和-125~+130SJMP 80H7.位寻址:以位地址中的内容为操作数SETB 20HMOV 32H, C总结一下各种寻址方式的使用场合:立即寻址:常数直接寻址:SFR和内部数据RAM寄存器寻址:寄存器区寄存器间接寻址:内部数据RAM和外部数据RAM变址寻址:程序存储器相对寻址:PC位寻址:位地址区。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

详解西门子间接寻址【址概念】完整一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。

其中操作数是指令要执行目标,也就是指令要进行操作址。

我们知道,PLC中划有各种用途存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,说来指定确切大小。

当然定时器T、计数器C不存这种衡量体制,它们仅用位来衡量。

由此我们可以到,要描述一个址,至少应该包含两个要素:1、存储区域2、这个区域中具体位置比如:A Q2.0其中A是指令符,Q2.0是A操作数,也就是址。

这个址由两部分组成:Q:指是映像输出区2.0:就是这个映像输出区第二个字节第0位。

由此,我们出,一个确切址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗,例如:DBX200.0。

DB X 200 . 0其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:址标识符。

这样,一个确切址组成,又可以写成:址标识符 + 确切数值单元【间接寻址概念】寻址,就是指定指令要进行操作址。

给定指令操作址方法,就是寻址方法。

谈间接寻址之前,我们简单了解一下直接寻址。

所谓直接寻址,简单说,就是直接给出指令确切操作数,象上面所说,A Q2.0,就是直接寻址,A这个指令来说,Q2.0就是它要进行操作址。

这样看来,间接寻址就是间接给出指令确切操作数。

对,就是这个概念。

比如:A Q[MD100] ,A T[DBW100]。

程序语句中用方刮号 [ ] 标明内容,间接指明了指令要进行址,这两个语句中MD100和DBW100称为指针Pointer,它指向它们其中包含数值,才是指令真正要执行址区域确切位置。

间接由此名。

西门子间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。

【存储器间接寻址】存储器间接寻址址给定格式是:址标识符+指针。

指针所指示存储单元中所包含数值,就是址确切数值单元。

存储器间接寻址具有两个指针格式:单字和双字。

单字指针是一个16bit结构,从0-15bit,指示一个从0-65535数值,这个数值就是被寻址存储区域编号。

双字指针是一个32bit结构,从0-2bit,共三位,8进制指示被寻址位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535数值,这个数值就是被寻址字节编号。

指针可以存放M、DI、DB和L区域中,也就是说,可以用这些区域内容来做指针。

单字指针和双字指针使用上有很大区别。

下面举例说明:L DW#16#35 //将32位16进制数35存入ACC1T MD2 //这个值再存入MD2,这是个32位位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2T MW100 //这个值再存入MW100,这是个16位位存储区域OPN DB[MW100] //打开DB10。

这里[MW100]就是个单字指针,存放指针区域是M区, MW100中值10,就是指针间接指定址,它是个16位值!--------L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中内容为:16位整数10T MD104 //这个值再存入MD104,这是个32位位存储区域A I[MD104] //对I1.2进行与逻辑操作!=DIX[MD2] //赋值背景数据位DIX6.5!--------A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MD2] //赋值给Q6.5--------A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MW100] //错误!!没有Q10这个元件---------------------------------------------------------------------------------------------------从上面系列举例我们至少看出来一点:单字指针只应用址标识符是非位情况下。

确,单字指针前面描述过,它确定数值是0-65535,而byte.bit这种具体位结构来说,只能用双字指针。

这是它们第一个区别,单字指针另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗说,单字指针只可以用来指代这些存储区域编号。

相单字指针,双字指针就没有这样限制,它可以对位址进行寻址,还可以对BYTE、WORD、DWORD寻址,没有区域限制。

,有必有失,对非位区域进行寻址时,必须确保其0-2bit为全0!总结一下:单字指针存储器间接寻址只能用址标识符是非位场合;双字指针有位格式存,对址标识符没有限制。

也正是双字指针是一个具有位指针,,当对字节、字双字存储区址进行寻址时,必须确保双字指针内容是8倍数。

现,我们来分析一下上述例子中A I[MD104] 为什么最后是对I1.2进行与逻辑操作。

L L#+10 ,我们知道存放MD104中值应该是:MD104:0000 0000 0000 0000 0000 0000 0000 1010当作为双字指针时,就应该3-18bit指定byte,0-2bit指定bit来确定最终指令要操作址,:0000 0000 0000 0000 0000 0000 0000 1010 = 1.2详解西门子间接寻址<2>【址寄存器间接寻址】先前所说存储器间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向存储区内容就是指令要执行确切址数值单元。

但寄存器间接寻址中,指令要执行确切址数值单元,并非寄存器指向存储区内容,也就是说,寄存器本身也是间接指向真正址数值单元。

从寄存器到出真正址数值单元,西门子提供了两种途径:1、区域内寄存器间接寻址2、区域间寄存器间接寻址址寄存器间接寻址一般格式是:〖址标识符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。

〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖址标识符〗上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。

但这里,情况有所变化。

比较一下刚才例子:DIX [AR1,P#1.5]X [AR1,P#1.5]DIX可以认为是我们通常定义址标识符,DI是背景数据块存储区域,X是这个存储区域尺寸符,指是背景数据块中位。

但下面一个示例中M呢?X指定了存储区域尺寸符,那么存储区域符哪里呢?毫无疑问,AR1中!DIX [AR1,P#1.5] 这个例子,要寻址址区域事先已经确定,AR1可以改变这个区域内确切址数值单元,我们称之为:区域内寄存器间接寻址方式,相应,这里[AR1,P#1.5] 就叫做区域内寻址指针。

X [AR1,P#1.5] 这个例子,要寻址址区域和确切址数值单元,都未事先确定,确定了存储大小,这就是意味着我们可以不同区域间不同址数值单元以给定区域大小进行寻址,称之为:区域间寄存器间接寻址方式,相应,这里[AR1,P#1.5] 就叫做区域间寻址指针。

既然有着区域内和区域间寻址之分,那么,同样AR1中,就存有不同内容,它们代表着不同含义。

【AR格式】址寄存器是专门用于寻址一个特殊指针区域,西门子址寄存器共有两个:AR1和AR2,每个32位。

当使用区域内寄存器间接寻址中时,我们知道这时AR中内容指明数值单元,,区域内寄存器间接寻址时,寄存器中内容等同于上帖中提及存储器间接寻址中双字指针,也就是:其0-2bit,指定bit位,3-18bit指定byte字节。

其第31bit固定为0。

AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX这样规定,就意味着AR取值只能是:0.0 ——65535.7例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。

而区域间寄存器间接寻址中,要寻址区域也要AR中指定,显然这时AR中内容肯定于寄存器区域内间接寻址时,对AR内容要求,说规定不同。

AR:1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX比较一下两种格式不同,我们发现,这里第31bit被固定为1,同时,第24、25、26位有了可以取值范围。

聪明你,肯定可以联想到,这是用于指定存储区域。

对,bit24-26取值确定了要寻址区域,它取值是这样定义:区域标识符26、25、24位P(外部输入输出)000I(输入映像区)001Q(输出映像区)010M(位存储区)011DB(数据块)100DI(背景数据块)101L(暂存数据区,也叫局域数据)111我们把这样AR内容,用HEX表示话,那么就有:当是对P区域寻址时,AR=800xxxxx当是对I区域寻址时,AR=810xxxxx当是对Q区域寻址时,AR=820xxxxx当是对M区域寻址时,AR=830xxxxx当是对DB区域寻址时,AR=840xxxxx当是对DI区域寻址时,AR=850xxxxx当是对L区域寻址时,AR=870xxxxx列举,我们有了初步结论:AR中内容是8开头,那么就一定是区域间寻址;要DB区中进行寻址,只需8后面跟上一个40。

84000000-840FFFFF指明了要寻址范围是:DB区0.0——65535.7。

例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。

我们看到,寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?【P#指针】P#中P是Pointer,是个32位直接指针。

所谓直接,是指P#中#后面所跟数值存储单元,是P直接给定。

这样P#XXX这种指针,就可以被用来指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。

例如:● L P#Q1.0 //把Q1.0这个指针存入ACC1,此时ACC1内容=82000008(hex)=Q1.0★ L P#1.0 //把1.0这个指针存入ACC1,此时ACC1内容=00000008(hex)=1.0● L P#MB100 //错误!必须byte.bit结构给定指针。

● L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1内容=83000320(hex)=M100.0● L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复指定。

● L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1内容=840000D4(hex)=DBX26.4我们发现,当对P#指定数值时,累加器中值和区域内寻址指针规定格式相同(也和存储器间接寻址双字指针格式相同);而当对P#指定带有存储区域时,累加器中内容和区域间寻址指针内容完全相同。

相关文档
最新文档