用汇编语言,编子程序,采用间接寻址、循环控制的方式,

用汇编语言,编子程序,采用间接寻址、循环控制的方式,,第1张

寄存器间接寻址,可以这么来理解:

1、首先必须有一个 *** 作指令,这是必须的,指令做什么。这是第一部分。

2、既然是寄存器间接寻址,当然得有作为媒介的寄存器,这是第二部分。

3、既然是间接寻址,当然得有寻址的目标,这是第三部分。

寻址方式有如下:

立即寻址 、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址与程序控制有关的寻址方式:段内直接寻址、段间直接寻址、段内间接寻址、段间间接寻址。

如下:

寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。

在存储器中, *** 作数或指令字写入或读出的方式,有地址指定方式、相联存储方式和堆栈存取方式。几乎所有的计算机,在内存中都采用地址指定方式。当采用地址指定方式时,形成 *** 作数或指令地址的方式称为寻址方式。

寻址方式分为两类,即指令寻址方式和数据寻址方式,前者比较简单,后者比较复杂。值得注意的是,在传统方式设计的计算机中,内存中指令的寻址与数据的寻址是交替进行的。

当程序转移执行的顺序时,指令的寻址就采取跳跃寻址方式。所谓跳跃,是指下条指令的地址码不是由程序计数器给出,而是由本条指令给出。注意,程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容也必须相应改变,以便及时跟踪新的指令地址。

有四个,分别是基址寄存器BX,BP、变址寄存器SI、DI。这是计算机组成原理及汇编里面的。

这种方式下, *** 作数的有效地址EA不像直接寻址那样直接放在指令中而是由四个间址寄存器确定的 *** 作数可在两种段中确定。

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,存器有累加器(ACC)。

寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。

寻址的大概意思就是存储器的地址使用。

你首先需要了解西门子PLC的存储器有哪些。

一般用的有M存储区,V存储区,SM特殊存储区等等

他们都是单独的存储区。

还有需要了解位(bit),字节(BYTE),字(WORD),双字(DW)。

最简单的举例说明,Q存储区是PLC输出用的。

它有8个位,分别为Q00----Q07

这里的Q00到Q07,这个8个位,就是直接寻址。

间接寻址是需要指针来完成的。

说道间接寻址,还有一个必须要了解,就是“绝对地址”

比如VB0,它就是带表V存储区的,第0个字节,包含VB00---VB07。

在PLC中,每个地址都对应一个绝对地址。它是不可改变的,是PLC内部设定的。

比如VB0的“绝对地址”就是16#08000000

要使用间接寻址,首先你要建立一个“指针”

指针的意思大概就是把一个地址比如VB0,把它的“绝对地址”用MOV指令传送到比如VD100(指针必须用双字表示,32个位,4个字节,2个字)

&VB0就相当于VB0的绝对地址,VD100就是指针,VD100里面存储的不是VB0的值,而是它的“对绝对值”16#08000000。

如何把数值传送出去呢?

就需要

字节传送指令MOV_B来完成。

VD100,它表示的就是VB0内部的数值。

这个就是间接寻址。

最后总结一下,我们一般用的都是直接寻址,间接寻址用的不多(反正我基本上不用)

比如起保停程序。

这里的I00   I01   Q00 ,用的都是直接寻址。

希望能帮到你 ^ _ !

你应该是用的西门子的PLC吧,就直接拿一个应用的例子来解释吧。

例如,

直接寻址是你直接对一个区间的变量赋值或者搬移,例如MOV

500,VB100;

间接寻址是你对一个地址赋值或者搬移,例如,你先将

VB100的地址赋给AC1,指令是

MOVD

&VB100,AC1

然后再MOVD

500,AC1。

这样的两种做法的结果相同;

这样看,感觉好像直接寻址更方便,其实不然,比如如果你是要根据条件赋值给VB100~VB200中的其中一个;

如果你用直接寻址,那么你得根据条件写一百个这样的指令;例如MOV

500,VB100;MOV

500,VB101。。。。。。

如果你用间接寻址,那么你还是用上述两句话,

MOVD

&VB100,AC1;

这时候你的AC1就相当于有了VB100的地址,你再加一句,ADDD

AC1,VB10;

之后再用MOVD

500,AC1;以后你只需要对VB10赋值,就可以随意的进行更改你要用的VB,例如VB10

=

1的话,就相当于给VB101赋值。这样的用法在大规模的程序中,是非常方便的。

以上就是关于用汇编语言,编子程序,采用间接寻址、循环控制的方式,全部的内容,包括:用汇编语言,编子程序,采用间接寻址、循环控制的方式,、寻址方式有哪几种、8086/8088可用于间接寻址的寄存器有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10090844.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存