第三讲2 操作数的寻址方式
- 格式:ppt
- 大小:875.00 KB
- 文档页数:17
汇编语⾔--操作数的寻址⽅式(三)三、操作数的寻址⽅式操作数是指令或程序的主要处理对象。
如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。
在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,⼤量的指令在执⾏过程中都会涉及到操作数。
所以,在指令中如何表达操作数或操作数所在位置就是正确运⽤汇编指令的⼀个重要因素。
在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式。
操作数的各种寻址⽅式是⽤汇编语⾔进⾏程序设计的基础,也是本课程学习的重点之⼀。
微机系统有七种基本的寻址⽅式:⽴即寻址⽅式、寄存器寻址⽅式、直接寻址⽅式、寄存器间接寻址⽅式、寄存器相对寻址⽅式、基址加变址寻址⽅式、相对基址加变址寻址⽅式等。
其中,后五种寻址⽅式是确定内存单元有效地址的五种不同的计算⽅法,⽤它们可⽅便地实现对数组元素的访问。
另外,在32位微机系统中,为了扩⼤对存储单元的寻址能⼒,增加了⼀种新的寻址⽅式——32位地址的寻址⽅式。
为了表达⽅便,我们⽤符号“(X)”表⽰X的值,如:(AX)表⽰寄存器AX的值。
1、⽴即寻址⽅式操作数作为指令的⼀部分⽽直接写在指令中,这种操作数称为⽴即数,这种寻址⽅式也就称为⽴即数寻址⽅式。
⽴即数可以是8位、16位或32位,该数值紧跟在操作码之后。
如果⽴即数为16位或32位,那么,它将按“⾼⾼低低”的原则进⾏存储。
例如:MOV AH, 80H ADD AX, 1234H MOV ECX, 123456HMOV B1, 12H MOV W1, 3456H ADD D1, 32123456H其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第⼆操作数都是⽴即数,在汇编语⾔中,规定:⽴即数不能作为指令中的第⼆操作数。
该规定与⾼级语⾔中“赋值语句的左边不能是常量”的规定相⼀致。
⽴即数寻址⽅式通常⽤于对通⽤寄存器或内存单元赋初值。
图3.1是指令“MOV AX, 4576H”存储形式和执⾏⽰意图。
3.2 寻址方式所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么的方式找到操作数。
寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS—5 1单片机有七种寻找方式。
3.2.1 立即数寻址立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。
立即数只能作为源操作数,不能当作目的操作数。
例如: MOV A,#52H ;A←52HMOV DPTR,#5678H ;DPTR←5678H立即寻址示意图如3.1所示。
图3.1 立即寻址示意图3.2.2 直接寻址在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。
例如:MOV A,52H ;把片内RAM字节地址52H单元的内容送累加器A中。
MOV 52H,A ;把A的内容传送给片内RAM的52H单元中。
MOV 50H,60H ;把片内RAM字节地址60H单元的内容送到50H单元中。
MOV IE,#40H ;把立即数40H送到中断允许寄存器IE。
IE为专用功能寄存器,其字节地址为0A8H。
该指令等价于MOV 0A8H,#40H。
INC 60H ;将地址60H单元中的内容自加1。
图3.2直接寻址方式示意图在MCS-51单片机指令系统中,直接寻址方式可以访问2种存储空间:(1)内部数据存储器的低128个字节单元(00H~7FH)(2)80H~FFH中的(SFR)特殊功能寄存器。
这里要注意,指令MOV A,#52H与MOV A,52H指令的区别,后者表示把片内RAM字节地址为52H单元的内容传送到累加器(A)。
3.2.3 寄存器寻址由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。
寄存器一般指累加器A和工作寄存器R0~R7。
例如:MOV A,Rn ;A←(Rn)其中n为0~7之一,Rn是工作寄存器。
单片机指令系统-第3讲寻址方式单片机指令系统第 3 讲寻址方式在单片机的世界里,指令系统就如同它的语言规则,而寻址方式则是这套规则中至关重要的一部分。
简单来说,寻址方式决定了单片机如何找到操作数,也就是数据在存储器中的位置。
就好像我们在图书馆找一本书,需要知道它在哪个书架、哪一排,这就是“寻址”。
在单片机中,常见的寻址方式有以下几种:1、立即寻址立即寻址是最简单直接的一种方式。
在这种寻址方式中,操作数直接包含在指令中。
比如说,指令“MOV A, 50H”,这里的“50H”就是操作数,它直接跟在指令后面,单片机一看就知道要把 50H 这个值送到累加器 A 中。
这种方式的优点是指令执行速度快,因为操作数就在指令中,不需要再去别的地方找。
但缺点也很明显,就是能表示的操作数范围有限,通常只能是 8 位或 16 位的数值。
2、直接寻址直接寻址就稍微复杂一点了。
在这种方式下,操作数的地址直接出现在指令中。
例如,指令“MOV A, 30H”,这里的 30H 是操作数所在的地址,单片机通过这个地址就能找到存储在 30H 单元中的数据,并把它送到累加器 A 中。
直接寻址可以访问片内 RAM 的 00H 7FH 单元以及特殊功能寄存器(SFR)。
但要注意的是,对于 SFR,只能使用直接寻址方式进行访问。
3、寄存器寻址寄存器寻址就是操作数在寄存器中。
比如指令“MOV A, R0”,就是把寄存器 R0 中的内容送到累加器 A 中。
这种方式的优点是指令短,执行速度快,因为寄存器的访问速度通常比内存快得多。
在 8051 单片机中,寄存器寻址可以使用工作寄存器 R0 R7 以及部分特殊功能寄存器。
4、寄存器间接寻址寄存器间接寻址与寄存器寻址有点类似,但操作数的地址在寄存器中。
比如指令“MOV A, @R0”,这里的 R0 中存放的不是操作数,而是操作数的地址,单片机先从 R0 中取出地址,再根据这个地址找到操作数并送到累加器 A 中。
[转载]操作数的寻址⽅式寻址⽅式就是在汇编语⾔程序中寻找操作数或操作数地址的各种⽅法。
8086提供了与操作数有关和与I/O端⼝地址有关的两类寻址⽅式。
与操作数有关的寻址⽅式有七种,分别是:1)⽴即寻址,2)寄存器寻址,3)直接寻址,4)寄存器间接寻址,5)寄存器相对寻址,6)基址加变址寻址,7)相对基址加变址寻址,8)基址变址⽐例相对寻址;与I/0端⼝有关的寻址⽅式有1)直接端⼝寻址和2)间接端⼝寻址⽅式。
1. ⽴即寻址⽴即(Immediate)寻址,就是在指令中使⽤的操作数是常数,这个常数(即⽴即数)就包含在指令中。
MOV AX,2345H MOV AL,0EH2. 寄存器寻址寄存器(Register)寻址⽅式的操作数在CPU内部的寄存器中。
使⽤寄存器寻址,CPU不⽤访问内存就可以取得或修改操作数。
MOV BL,80;⽬标操作数BL是寄存器寻址MOV EAX,EBX ;源操作数EBX和⽬标操作数EAX都是寄存器寻址3. 直接寻址除了⽴即寻址和寄存器寻址⽅式外,其他的⼏种寻址⽅式的操作数都在内存单元中,寻址⽅式要说明的是CPU如何确定内存操作数的地址,然后CPU再对该内存单元中的操作数进⾏处理。
直接寻址(Direct)寻址就是指令中直接给出了操作数的地址。
指令中使⽤变量时,就是直接寻址。
MOV EAX,dValMOV dVal,EBX在翻译成机器指令后,变量是⽤它的地址⽽不是它的名字来表⽰的。
地址外⾯加⼀对⽅括号,表⽰取这个地址中的内容。
00401010 A1 11404000MOV EAX,[00404011]0040101589 1D 11404000MOV [00404011],EBXCPU在执⾏指令的时候,可以直接从指令码中取出地址,⽽不必经过计算或其他操作,所以叫做直接寻址。
4. 寄存器间接寻址采⽤寄存器间接(Indirect)寻址⽅式的操作数的地址放在寄存器中。
MOV ESI,00404011HMOV EAX,[ESI]注意,MOV EAX,ESI和MOV EAX,[ESI]的区别。