第09章 转移指令的原理
- 格式:ppt
- 大小:371.00 KB
- 文档页数:47
三菱PLC传送指令的原理与应用一、PLC传送指令的概述PLC(Programmable Logic Controller,可编程逻辑控制器)是一种专门应用在工业控制系统中的数字电子设备。
在工业自动化过程中,PLC可以接受各种输入信号,并通过输出信号来控制机械设备和工艺过程。
PLC的传送指令是PLC程序中的基本指令之一,用于实现数据在不同存储区之间的传递。
二、PLC传送指令的原理PLC传送指令的原理是数据的读取、存储和传输。
PLC内部有多个存储区,包括输入存储区(I区)、输出存储区(O区)、中间存储区(M区)和特殊存储区(S区)。
传送指令根据指定的源地址和目标地址,将源地址存储区的数据读取到指定的目标地址存储区中。
三、PLC传送指令的应用PLC传送指令在工业控制系统中有广泛的应用,常用于数据传输和复制。
下面列举了几种常见的应用场景:1.数据传输:PLC传送指令可以将一个存储区的数据传送到另一个存储区,实现数据的传输和共享。
例如,将传感器测量的数据传送到控制算法所需的存储区,或将控制逻辑生成的输出数据传送到控制执行器所需的存储区。
2.数据复制:PLC传送指令可以将一个存储区的数据复制到多个目标地址存储区,实现数据的复制和分发。
例如,在多个输出设备之间复制相同的输出数据,或在多个控制算法之间复制相同的输入数据。
3.数据整理:PLC传送指令可以根据特定的逻辑条件,选择性地传送数据。
例如,根据某个开关的状态,选择性地传送不同的输入数据,或根据某个变量的值,选择性地传送不同的输出数据。
4.数据处理:PLC传送指令可以结合其他指令和运算符,对传送的数据进行处理和计算。
例如,将传输的数据与常量进行比较,根据比较结果选择性地传送不同的数据,或将传输的数据进行数学运算,得到新的结果。
5.数据备份:PLC传送指令可以将一个存储区的数据备份到另一个存储区,实现数据的备份和恢复。
例如,在控制系统发生故障或数据丢失时,可以通过将备份数据传送回原来的存储区,恢复系统的正常运行。
第九章转移指令的原理1. 可以修改IP,或同时修改CS和IP 的指令统称转移指令。
概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。
2.8086CPU的转移行为有以下几种:(1) 只修改IP 时,称为段内转移。
例如:jmp ax(2) 同时修改CS和IP 时,成为段间转移。
例如:jmp 1000:03. 由于转移指令对IP 值修改范围的不同,段内转移又分为:短转移和近转移。
(1) 短转移IP 的修改范围是-128~127(2) 近转移IP 的修改范围是-32768~327674.8086CPU的转移指令分为以下几类:(1) 无条件转移指令(如:jmp)(2) 条件转移指令(3) 循环指令(如:Loop)(4) 过程(5) 中断这些转移指令的前提条件可能不同,但转移的基本原理是相同的。
5. 操作符offset 是一个伪指令,它的功能是取得标号的偏移地址。
案例:将s 处的一条指令复制到s0处assume cs:codesgcodesg segments: mov ax,bx ;mov ax,bx 占两个字节mov si,offset s ; 得到标号s 所在的偏移地址赋值给simov di,offset s0 ; 得到标号s0所在的偏移地址赋值给dimov ax,cs:[si]mov cs:[di],axs0: nop ;nop 占一个字节nopcodesg endsend6.jmp 为无条件转移,可以只修改IP,也可以同时修改CS和IP 的值jmp 指令要给出两个信息:(1) 转移的目的地址。
(2) 转移的距离(段间转移,段内转移的短转移和近转移)7.jmp short 标号(转到标号处执行)这种指令实现的是段内短转移。
jmp 指令中的" 标号"是代码段中的标号,指明了指令要转移的目的地,转移指令结束,CS:IP 指向标号处的指令。
8.CPU在执行jmp 指令时并不需要指明转移的目标地址。
转移指令的原理转移指令的原理1.0 操作符offset操作我offset在汇编语⾔中是由编译器处理的符号,伪指令,它的功能是取得标号的偏移地址将start的代码复制到s0中去assume cs:codecode segmentstart: mov ax, bx ;这⾥占两个字节mov si, offset start ;将start的偏移地址送⼊si中 0000Hmov di, offset s0 ;将s0的偏移地址送⼊di中mov ax, cs:[si] ;通过物理地址将数据送⼊ax,在通过ax送到di中mov cs:[di], axs0: nop ;nop 占⼀个字节nopmov ax, 4c00Hint 21Hcode endsend start1.1 Jmp指令jmp为⽆条件跳转指令,只可以修改ipjmp指令需要给出两种信息转移的地址转移的距离(段内转移,段内短转移,段内近转移)assume cs:codecode segmentstart: mov ax, 0jmp short sadd ax, 1s: inc axmov ax, 4c00Hint 21Hcode endsend startjmp short 标号(转移到标号处执⾏命令)这种jmp格式指令实现的是段内短转移,它对ip的修改范围为-128~127,也就是说,它向前可以越过128个字节,向后的话最多可以越过127个字节assume cs:codecode segmentstart: mov ax, 0jmp short ptr sdb 256 dup(0) ;这⾥定义256个空字节 short是跳不过去的,编译不会通过,可以改成near ptr, far ptrs: inc axmov ax, 4c00Hint 21Hcode endsend start汇编与机器码的对照可以看到在汇编指令中出现的idata,不论它是⼀个数据还是偏移地址,它都会在对应的机器指令中出现,因为它是cpu执⾏的机器指令,他必须要处理的数据或地址,下图是上⾯程序对应的机器代码CPU是如何进⾏转移的尼?通过以上可以CPU 不需要⽬的地址也可以实现对地址的修改ip指向03H 将指令读取到指令缓存区,ip⾃增2变成05H,执⾏执⾏后,EB是jmp的机器码,向后在跳3个字节,ip等于08H,这个时候执⾏inc ax将ax⾃增1jmp short 标号的功能是(ip)= (ip)+8位偏移 8位位移是由程序在编译的时候算出的jmp near ptr 标号说明,段内近转移 16位位移16位位移的范围是-32768~327671.2 转移指令的⽬的地址之前的jmp,其机器码中并没有转移的⽬的地址,⽽是相对于当前ip的转移偏移jmp far ptr 标号实现的段间转移,⼜称段转移far ptr 指明了指令中标号的段地址和偏移地址改变了CS:IPassume cs:codecode segmentstart: mov ax, 0jmp far ptr sdb 256 dup(0)s: inc axmov ax, 4c00Hint 21Hcode endsend startjmp far ptr可以看出机器码是包含要跳转的地址,没有相对于当前ip的计算转移偏移1.3 jmp 寄存器相当于 jmp near ptr 标号1.4 转移地址在内存中的jmpjmp word ptr 内存单元地址功能:内存单元存储的⼀个字就是转移的⽬的地的偏移地址因为word是16位的只能完成段内转移,进⾏16位位移代码⽰例mov ax, 1234Hmov ds:[0], axjmp word ptr ds:[o] ;这⾥跳转的为CS:1234Hjmp dword ptr 内存单元地址(段间转移)功能:从内存单元地址存放2个字,⾼地址对应段地址,低地址对应偏移地址因为dword是32位的可以完成段间转移CS=内存单元地址+2IP= 内存单元地址代码⽰例mov ax, 1234Hmov ds:[0], axmov ds:[2], 0jmp word ptr ds:[0] ;这⾥跳转的为CS:IP = 0000:1234H1.5 jcxz 指令 jmp cx is zerojcxz 如果cx为0则跳转是⼀个有条件的跳转指令,所有的有条件转移指令都是短转移,对应的机器码包含转移的位移,⽽不是⽬的地址,对IP的修改都是-128~1271.6 loop指令loop为循环指令,所有循环都是短转移,对应的机器码是转移的位移,⽽不是物理地址cx为0 则向下执⾏在内存2000H段中查找第⼀个值为0的字节,找到后将偏移地址放⼊dx中assume cs:codecode segmentstart: mov ax, 2000Hmov ds, axmov bx, 0s: mov cl, [bx]mov ch, 0jcxz okinc bx ;⾃增1 去找下⼀个内存单元的数据loop sok: mov dx, bxmov ax, 4c00Hint 21Hcode endsend start1.7 根据位移进⾏转移的意义前⾯讲到:jmp short 标号jmp near ptr 标号jcxz 标号loop 标号⼏种指令,他们对ip的修改都是根据转移⽬的地址和起始地址之前的位移进⾏的,他们对应的机器码不包含转移⽬的地的地址,⽽是包含到⽬的地的位移距离这样的设计,⽅便了程序段在内存中的浮动装配如果这些指令码中是包含物理地址,则就对程序段在内存中的偏移地址有了严格的限制1.8 编程题学蒙蔽先停停。
汇编条件转移指令汇编语言是一种底层的计算机语言,它直接操作计算机硬件,因此在编写高效的程序时,掌握汇编语言是非常重要的。
条件转移指令是汇编语言中的一种重要指令,它可以根据特定的条件来改变程序的执行流程。
本文将介绍汇编条件转移指令的基本概念、语法和使用方法。
一、基本概念条件转移指令是一种根据特定条件来改变程序执行流程的指令。
在程序执行过程中,如果满足特定条件,就会跳转到指定的地址继续执行,否则就会继续执行下一条指令。
条件转移指令通常用于实现程序的分支和循环结构。
二、语法格式条件转移指令的语法格式如下:```Jcc destination```其中,Jcc表示条件转移指令的助记符,cc表示条件码,destination表示跳转的目标地址。
条件码是由前缀字母J和后缀字母S、Z、P、O、C、N等组成的,它们分别表示以下条件:- JS:符号位为1(即负数)- JZ:零标志位为1- JP:奇偶标志位为1- JO:溢出标志位为1- JC:进位标志位为1- JN:负数标志位为1三、使用方法条件转移指令的使用方法如下:1. 判断条件在使用条件转移指令之前,需要先判断特定条件是否满足。
条件通常是通过比较指令来实现的,比如CMP指令可以比较两个操作数的大小关系,并设置相应的标志位。
2. 编写条件转移指令根据需要跳转的条件,选择相应的条件转移指令,并将跳转的目标地址作为操作数填写到指令中。
3. 执行条件转移指令当条件转移指令被执行时,会根据特定条件判断是否跳转到目标地址。
如果条件满足,则跳转到目标地址继续执行,否则继续执行下一条指令。
四、示例代码下面是一个简单的示例代码,演示了如何使用条件转移指令实现一个简单的分支结构:```MOV AX, 5CMP AX, 10JL less_thanMOV BX, 10JMP endless_than:MOV BX, 5end:```该代码首先将AX寄存器的值设置为5,然后使用CMP指令比较AX的值和10的值。