第3章数据处理(3)算数与逻辑运算指令


3.5.2 减法指令
减法指令 SUB 带借位减法指令 SBB 减量指令 DEC 求补指令 NEG 比较指令 CMP DEC不影响CF标志外 不影响CF 除DEC不影响CF标志外 其他按定义影响全部状态标志位
数据传送类指令不影响( 不改变) 数据传送类指令不影响(=不改变)状态标志 不影响 加法和减法指令根据结果按定义改变 根据结果按定义改变状态标志 加法和减法指令根据结果按定义改变状态标志
1. 乘法指令
无符号数乘法指令 MUL 有符号数乘法指令 IMUL 计算二进制数乘法:A5H× 计算二进制数乘法:A5H×64H MUL指令作无符号数乘法 指令作无符号数乘法: 用MUL指令作无符号数乘法: 4074H(=16500)=A5H(=165) 64H(=100) (=16500)=A5H(=165 (=100 4074H(=16500)=A5H(=165)×64H(=100) IMUL指令作无符号数乘法 指令作无符号数乘法: 用IMUL指令作无符号数乘法: DC74H(= 9100)=A5H(= 91) 64H(=100) (=)=A5H(=(=100 DC74H(=-9100)=A5H(=-91)×64H(=100) 加减指令只进行无符号数运算 利用CF和 区别无符号数和有符号数 利用 和OF区别无符号数和有符号数
带进位加法指令ADC 2. 带进位加法指令ADC
两个操作数相加,再加CF,结果送目的操作数 两个操作数相加,再加CF, CF 按照定义影响6 按照定义影响6个状态标志位 ;dest←dest+src+ ADC dest,src ;dest←dest+src+CF 用于与ADD ADD指令相结合实现多精度数的加法 用于与ADD指令相结合实现多精度数的加法
3.5 算术运算类指令
算术运算 对数据进行加减乘除 基本的数据处理方法 加减运算有“ 的结果外, 加减运算有 “ 和 ” 或 “ 差 ” 的结果外 , 还有进借 溢出等状态标志, 位、溢出等状态标志,也是结果的一部分 注意算术运算类指令对标志的影响 注意算术运算类指令对标志的影响 掌握: 掌握:加法和减法指令 熟悉: 熟悉:乘法和除法指令 理解:零位扩展和符号扩展 理解:
先将两个操作数的低32位相加( ADD指令) 先将两个操作数的低32位相加(用ADD指令) 32位相加 指令 再加高位部分、并将进位加到高位( ADC指令 指令) 再加高位部分、并将进位加到高位(用ADC指令)
〔例〕64位数据相加程序 64位数据相加程序 取低32 32位 mov eax,dword ptr qvar1 ;取低32位 加低32 32位 设置CF add eax,dword ptr qvar2 ;加低32位,设置CF 取高32 32位 mov edx,dword ptr qvar1+4 ;取高32位 加高32 32位 同时加CF adc edx,dword ptr qvar2+4 ;加高32位,同时加CF
ADD与 ADD与ADC? ? ADD与 ADD与SUB? ?
SUB与 SUB与SBB? ? ADC与 ADC与SBB? ?
INC与 INC与DEC? ? DEC与 DEC与NEG? ?
3.5.3 乘法除法等指令
算术运算类指令还有 乘法除法指令 零位扩展和符号扩展指令 十进制调整指令 ……
MUL IMUL DIV IDIV MOVZX MOVSX CBW CWD CWDE CDQ DAA DAS AAA AAS AAM AAD ……
加法指令ADD 1. 加法指令ADD
目的操作数加上源操作数, 目的操作数加上源操作数,和送到目的操作数 加法:dest←dest+ ADD dest,src ;加法:dest←dest+src
寄存器与立即数、寄存器、 寄存器与立即数、寄存器、存储单元的加法 存储单元与立即数、寄存器的加法 存储单元与立即数、
〔例〕大小写字母转换程序
msg
again:
; 数据段 大写=小写- 大写=小写-20H byte 'welcome',0 小写=大写+ 小写=大写+20H ; 代码段 msg)mov ecx,(lengthof msg)-1 ECX等于字符串长度 ; ECX等于字符串长度 EBX= mov ebx,0 ; EBX=0指向头一个字母 msg[ebx],'a'sub msg[ebx],'a'-'A' 小写字母减20H 20H转换为大写 ; 小写字母减20H转换为大写 inc ebx ; 指向下一个字母 loop again ; 循环 mov eax,offset msg call dispmsg ; 显示
3.5.1 加法指令
加法指令 ADD 带进位加法指令 ADC 增量指令 INC INC不影响进位标志CF外 不影响进位标志CF 除INC不影响进位标志CF外 其他指令按定义影响全部状态标志位 按照运算结果相应设置各个状态标志为0或为1 按照运算结果相应设置各个状态标志为0或为1
数据传送类指令不影响( 不改变) 数据传送类指令不影响(=不改变)状态标志 不影响 加法和减法指令根据结果按定义改变 根据结果按定义改变状态标志 加法和减法指令根据结果按定义改变状态标志
例 mov eax,0aaff7348h ;EAX=AAFF7348H ;EAX= sub al,27h ;EAX=AAFF7321H,OF= SF= ZF= PF= CF= ;EAX=AAFF7321H,OF=0,SF=0,ZF=0,PF=1,CF=0 sub ax,3fffh ;EAX=AAFF3322H,OF= SF= ZF= PF= CF= ;EAX=AAFF3322H,OF=0,SF=0,ZF=0,PF=1,CF=0 sub eax,0bb000000h ;EAX=EFFF3322H,OF= SF= ZF= PF= CF= ;EAX=EFFF3322H,OF=0,SF=1,ZF=0,PF=1,CF=1
求补指令NEG 4. 求补指令NEG
对操作数执行求补运算,即用零减去操作数 对操作数执行求补运算, ;reg/mem←0- NEG reg/mem ;reg/mem←0-reg/mem 对标志的影响与用零作减法的SUB SUB指令一样 对标志的影响与用零作减法的SUB指令一样 可用于求补码或由补码求其绝对值 mov ax,0ff64h ;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1, neg al ;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1 ;AX=FFFFH,OF=0,SF=1,ZF=0,PF=1, sub al,9dh ;AX=FFFFH,OF=0,SF=1,ZF=0,PF=1,CF=1 ;AX=0001H,OF=0,SF=0,ZF=0,PF=0, neg ax ;AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1 ;AX=0000H,OF=0,SF=0,ZF=1,PF=1, dec al ;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1 ;AX=0000H,OF=0,SF=0,ZF=1,PF=1, neg ax ;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=0
乘法指令 指令类型 无符号数乘法 MUL src 有符号数乘法 IMUL src 操作数组合及功能 举例
mul bl AX=AL×r8/m8 = × imul bx DX.AX=AX×r16/m16 = × EDX.EAX=EAX×r32/m32 mul dvar = × imul eax,10 imul ebx,ecx imul ax,bx,-2
可以是字节加法、16位加法、32位加法。 可以是字节加法、16位加法、32位加法。 位加法 位加法 影响6 影响6个状态标志位
例 eax,0aaff7348 7348h EAX=AAFF7348 7348H mov eax,0aaff7348h ;EAX=AAFF7348H al,27 27h al=48h+27h=6 48h+27h= add al,27h ;al=48h+27h=6Fh ;EAX=AAFF736FH,OF= SF= ZF= PF= CF= ;EAX=AAFF736FH,OF=0,SF=0,ZF=0,PF=1,CF=0 ax,3 ax=736fh+3fffh=b36 736fh+ 36eh add ax,3fffh ;ax=736fh+3fffh=b36eh ;EAX=AAFFB36EH,OF= SF= ZF= PF= CF= ;EAX=AAFFB36EH,OF=1,SF=1,ZF=0,PF=0,CF=0 add eax,88000000h ;0aaffb36eh+88000000h eax,88000000h aaffb36eh+88000000h 88000000 36eh+88000000 ;EAX=32FFB36EH,OF= SF= ZF= PF= CF= ;EAX=32FFB36EH,OF=1,SF=0,ZF=0,PF=0,CF=1
imul eax,dword ptr [esi+8],5
双操作数乘法 r16=r16×r16/m16/i8/i16 = × IMUL dest,src r32=r32×r32/m32/i8/i32 = × = × 三操作数乘法 r16=r16/m16×i8/i16 IMUL dest,src,imm r32=r32/m32×i8/i32 = ×
减量指令DEC 3. 减量指令DEC
对操作数减1(减量)再将结果返回原处 对操作数减1 减量) reg/mem←reg/mem- DEC reg/mem ;减1:reg/mem←reg/mem-1 用于计数器和地址指针的调整 不影响进位CF标志, CF标志 不影响进位CF标志,影响其他状态标志位 例如 dec ecx dec esi dec wvar dec dvar[ebx+edi]
带借位减法指令SBB 2. 带借位减法指令SBB
合集下载

第三章(后篇1)算术运算与逻辑运算等PPT课件

第三章(后篇1)算术运算与逻辑运算等PPT课件

【 解】:
MOV R0,#M1 ;x1指针赋初值
RAM
MOV R1,#M2 ;x2指针赋初值 MOV A,@R0 ;取x1低8位送A ADD A,@R1 ;x1与x2低8位相加
M2+1 X2 data8~15 M2 X2 data0~7
MOV @R0,a ;低8位和送m1单元 INC R0 INC R1 ;修改指针
2,由于上面的原因,INC指令不能作为一般的数据算术运算 使用,INC主要用于修改数据指针等控制、循环语句中使用。
返回本节目录
编程举例
已知M1、M2单元中存有两个16位无符号数x1、x2(低位在
前)。试写出x1+x2,并将结果放入M1、M1+1单元(低8位
在M1单元)。设两数之和不会超过16位(65535)。
CP CS AC
1,若两数是无符号数,因Cy=0无溢出:90+107=197
2,若两数是有符号数,因OV=1,故有溢出,两个正数相加 后变为负数,很明显结果是不正确的。
加法指令(二):带进位的加法指令
格式: ADDC A,Rn ;A+Rn+Cy→A ADDC A,direct ;A+(direct) +Cy→A ADDC A,@Ri ;A+(Ri) +Cy→A ADDC A,#data ;A+data+Cy→A
【注意】:这里的Cy是指令执行前的Cy; 对PSW的影响同ADD指令。
加1指令
格式: INC A
;累加器A加一
INC Rn
;Rn+1→Rn
INC direct ;内存单元数据加一
INC @Ri ;内存单元数据加一
INC DPTR ;dptr+1→dptr

第三章 运算方法

第三章 运算方法

第三章运算方法一名词解释(1)溢出——在运算过程中如出现数据超过这个数表示范围的现象,称溢出。

(2)运算器——运算器是一个用于信息加工的部件,又称执行部件。

它对数据进行算术运算和逻辑运算。

(3)并行加法器——全加器的位数与操作数的位数的加法器称并行加法器。

(4)进位链——进位信号的产生与传递的逻辑结构称为进位链。

(5)进位产生函数——当xi与yi都为1时,Ci=1,即有进位信号产生,所以将xiyi称为进位产生函数,以Gi表示。

(6)进位传递函数——当xi⊕yi=1、Ci-1=1时,则Ci=1。

这种情况可看作是当xi⊕yi=1时,第i-1位的进位信号Ci-1可以通过本位向高位传送。

因此把xi⊕yi称为进位传递函数,以Pi表示。

(7)桶形移位器——在选择电路的控制下可以实现左移、右移、直送操作的具有移位功能的电路。

一.选择题1.大部分计算机内的减法是用_____实现。

A.将被减数加到减数中B.从被减数中减去减数C.补码数的相加 D.补码数的相减2.原码加减法是_____。

A.操作数用原码表示,连符号位直接相加减B.操作数用原码表示,尾数直接相加减,符号位单独处理C.操作数用原码表示,根据两数符号决定实际操作,符号位单独处理D.操作数取绝对值,直接相加减,符号位单独处理3.补码加减法是指______。

A.操作数用补码表示,两尾数加减,符号位单独处理,减法用加法代替B.操作数用补码表示,符号位和尾数一起参加运算,结果的符号与加减相同C.操作数用补码表示,连符号位直接相加减,减某数用加负某数的补码代替,结果的符号在运算中形成D.操作数用补码表示,由数符决定两尾数的操作,符号位单独处理4.在原码加减交替除法中,符号位单独处理,参加操作的数是_____。

A.原码 B.绝对值C.绝对值的补码 D.补码5.两补码相加,采用1位符号位,则当_____时,表示结果溢出。

A.最高位有进位 B.最高位进位和次高位进位异或结果为0C.最高位为1 D.最高位进位和次高位进位异或结果为16.在下列有关不恢复余数法何时需恢复余数的说法中,正确的是_____。

反汇编语言常用指令

反汇编语言常用指令

内容目录计算机寄存器分类简介计算机寄存器常用指令一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6 个段寄存器(ES、CS、SS、DS、FS 和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU 中的寄存器相一致。

.4个16位寄存器又可分割成8个独立的8位寄存器(AX: AH-AL、BX:BH-BL、CX: CH-CL、DX: DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字 /字节的信息。

寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register) o它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

算术与逻辑运算指令具体解释

算术与逻辑运算指令具体解释

算术与逻辑运算指令具体解释算术与逻辑运算指令具体解释前⾔上⼀次解说了数据传送指令,⾹型⼤家肯定对此有了⼀定的认识了.这些简单的汇编指令,却能够将复杂的程序井然有序的运⾏完成,实在是让⼈惊叹.算术与逻辑运算指令算术逻辑运算包含⾮常多种,各级⼤家应该能⾮常快想出来,⽐⽅常见的加减乘除,与或⾮,左移右移等等另⼀个区地址运算符,⼤家可能想不到,可是看完以下这⼀部分之后,就会认为这个取地址运算符是个精妙的指令.先说⼀下各个指令,见下图:这⾥⾯⽐較特别的指令就是leal(取地址指令),其余的指令都是⽐較常规的算术和逻辑运算,相⽐之下⾮常好理解,因此在这⾥咱们重点是介绍leal指令.leal指令leal指令时很奇妙的⼀个指令,他能够去⼀个存储器操作数的地址,⽽且将其赋给⽬的操作数.假设⽤C语⾔其中来相应的话,就相当于&运算符.⽐⽅对于leal 4(%edx,%edx,4),%eax这条指令来说,我们如果%edx寄存器的值为x的话,那么这条指令的作⽤就是将4+x+4x=5x+4赋给%eax寄存器.他和mov指令的差别就在于,如果是movl 4(%edx,%edx,4),%eax这条指令,它的作⽤是将内存地址为5x+4的内村区域的值赋给%eax寄存器,⽽leal指令仅仅是将5x+4这个地址赋给⽬的操作数%eax⽽已,它并不正确寄存器进⾏引⽤的值的计算.为了更好的表⽰这条指令的效果,咱们⽤⼀个图来简单的表⽰这⼀过程.我们如果下图是运⾏指令之前,寄存器和存储器的状态.能够看到,此时在寄存器中,地址为5x+4的区域的值为1000.那么此时若是进⾏movl 4(%edx,%edx,4),%eax操作,⾮常显然,%eax的值应该为1000,也就是下图:可是假设进⾏leal 4(%edx,%edx,4),%eax操作的话,%eax的值就不是1000,由于leal指令不回去取存储器其中的值,因此寄存器%eax的值应该是5x+4.试想⼀下,倘若在地址为5x+4的位置存储的是变量i,那么事实上这条指令就相当于&i操作,也就是C语⾔其中的&取地址操作的汇编级做法.⼀个案例:因为其它的指令⾮常easy,因此咱们就不⼀⼀介绍了,咱们使⽤⼀个⼩程序来做⼀个实例,顺道看⼀下上⾯的算术与逻辑运算指令都是被怎样使⽤的.我们考虑这样⼀个C语⾔程序:int arith(int x, int y , int z){int t1 = x+y;int t2 = z*48;int t3 = t1&0xFFFF;int t4 = t2*t3;return t4;}这⾥⾯包括了加,乘,与运算,我们使⽤GCC -O1 -S sum.c这条命令,然后使⽤cat sum.c这条命令查看,就会得到例如以下的汇编代码:.file "sum.c".text.globl arith.type arith, @functionarith:pushl %ebpmovl %esp, %ebp //以上为栈帧建⽴movl 16(%ebp), %eaxleal (%eax,%eax,2), %edxsall $4, %edxmovl 12(%ebp), %eaxaddl 8(%ebp), %eaxandl $65535, %eaximull %edx, %eax //下⾯为栈帧完毕popl %ebpret.size arith, .-arith.ident "GCC: (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3".section .note.GNU-stack,"",@progbits这⾥⾯还有leal指令,能够看到程序其中并没有取地址&操作,所以这⾥的leal指令不是⽤来取地址的,咱们使⽤⼀个图来演⽰这个程序的执⾏过程.⾸先是栈帧的建⽴过程,栈帧建⽴好以后,寄存器和存储器的状态例如以下:以上便是建⽴好的栈帧,通上⼀次⼀样,栈指针和帧指针都指向了⼀个新的位置,在帧指针偏移量为8,,12,16的地⽅存储着传递进来的參数x,y,z.接下来我们就開始分析,在汇编代码层次,是怎样完毕上述C语⾔程序其中的⼀些列动作的.⾸先是⼀个mov指令,他的作⽤⾮常easy,就是将參数z取⼊寄存器,以下是它的汇编代码以及图⽰:movl 16(%ebp),%eax上⾯的指令⽐較简单,接下来的这条指令就有点特别了,是⼀条leal指令.这⾥的leal指令不是⽤来取地址的,⽽是⽤来进⾏乘法运算的,他的⽬的是将%eax寄存器其中的值乘以3,然后发送⾄%edx寄存器.⽽採⽤的⽅式则是2*x+x的⽅式,这正是我们之前讲过的乘法优化算法,使⽤移位和加法来计算乘法.leal (%eax,%eax,2),%edx上⾯计算3z的⽬的,在接下来的这⼀条指令就看出来了.接下来的⼀条会令是sal左移操作,位数为4,左移4位事实上就相当于16,因此接下来的⼀条指令事实上就相当于将寄存器%edx当值的值乘以16,这事实上刚好是在计算48*z.从这⾥也能够看出来,在运⾏C程序的时候,并不⼀定依照程序其中的顺序去计算.下⾯是sal指令的内容与图⽰sall $4,%edx接下来的指令依旧是简单的取參数y,因此咱们就不解释了,看指令和图⽰movl 12(%ebp),%eax以下的⼀条指令是add加法指令,它是将左边操作数的值加到右边的⽬的操作数.也就是将内存地址为8(%ebp)的值加到%eax寄存器,⽽8(%ebp)这个位置存放的刚好是x,因此这⾥计算的便是x+y的值,⽽结果会存⼊%eax寄存器.以下是指令的内容和图⽰:addl 8(%ebp),%eax接下来是⼀条运算指令and,他计算的则是t1与0xFFFF(⼗进制就是65535)的与运算,t1的值为x+y,此时就存在%eax寄存器.接下来看这条指令和图⽰:andl $65535 ,%eax接下来是最后⼀个计算过程的指令imul乘法指令,它的作⽤也是将左边操作数的值乘到右边的⽬的操作数上.也就是将%edx寄存器的值乘到%eax寄存器上⾯去,⽽%edx此时的值为48*z(也就是t2),⽽%eax的值为(x+y)&0xFFFF(也就是t3),两者相乘得到t4的值,结果将存放在%eax寄存器,⽽且作为返回值返回,下⾯是指令和图⽰:imull %edx,%eax⾄此,我们整个计算过程就结束了,当中⽤到了⼀些算术与逻辑运算指令,事实上他们并没有什么难度,图例已经说得⾮常清楚了.最后则是栈帧的完毕部分,下⾯为当前帧释放后的状态:不知道打击注意到了没有,每次在%ebp偏移量为4的位置都是空着的,⽽參数都在8,12,16这种位置,难道偏移量为4的位置是空的吗?当然不是,地址不会跳着来,事实上他存储的是返回地址,这⼀点在此不做过多的说明,以后遇到了再具体的说明.⼩⼩的结⼀下本章内容是认识⼀下⼀些常见的算术和逻辑运算指令.事实上没有什么难度.。

算术与逻辑运算指令PPT课件

算术与逻辑运算指令PPT课件

第2页/共45页
算术与逻辑运算指令
次高位进位 • 溢出O:当进行8位或16位数的加法或减法运算时,O = 最高位进位(借位) (借位)
• 49H + 6DH = 0100 1001B + 0110 1101B = 1011 0110B • 最高位(8th)无进位,次高位(7th)有进位 • O=1,有溢出
第9页/共45页
加法、减法与比较指令
• 带进位(借位)加法(减法)指令 • 指令形式:ADC/SBB REG/MEM, REG/MEM/imm • 目的操作数=目的操作数±源操作数±C(进位标志位) • 与ADD/SUB指令形式一致 • 实现位宽大于16位的加法/减法 • BX-AX+DX-CX
ADC
LEA SI, DATA2; 装载DATA2 MOV CX, [SI] MOV DX, [SI+2]
ADD AX, CX;计算BX-AX+DX-
CX|DATA1+DATA2
ADC BX, DX
• STACK SEGMENT • DW 128 DUP(0) • ENDS • CODE SEGMENT
LEA SI, RESULT;存储结果 MOV [SI], AX MOV [SI+2], BX ENDS END 代ST码ART
第8页/共45页
加法、减法与比较指令
• 寄存器加法/减法
• 操作数均为寄存器 • ADD/SUB AX, BX; AX = AX ± BX
• 立即数加法/减法
• 源操作数为立即数 • ADD/SUB AX, 100H • ADD/SUB WORD PTR[DI], 100H • 内存与寄存器加法/减法 • ADD/SUB AX, [DI] • ADD/SUB AX, NUM • ADD/SUB AX, [DI+2]

第3章 指 令 系 统PPT课件

第3章 指 令 系 统PPT课件
Page 24
格式4:[ A16 ] = Rs 说明:把源寄存器Rs中的数据存储到A16 为地址的存储单元。 例如:R1=0x0011 //R1的值为0x0011
3.2 SPCE061A指令系统
3.2.1 数据传送指令
数据传送指令是把源操作数传送到指 令所指定的目标地址中,是一种复制操作, 指令执行后,源操作数不变,目的操作数 被源操作数代替。
数据传送指令的通用格式如下: <目的操作数>=<源操作数>
Page 17
下面按寻址方式介绍SPCE061A的数 据传送指令,表3-2给出了所有的数据传送 指令以及各个指令的格式、执行周期数、 指令长度及对标志位状态的影响。
R1=R2 //R1的值变为0xF001
Page 23
3.直接寻址
格式1:Rd = [ A6 ] 说明:把A6指定的存储单元中的数据读到 Rd寄存器。 格式2:Rd = [ A16 ] 说明:把A16指定的存储单元中的数据读 到Rd寄存器。 格式3:[ A6 ] = Rs 说明:把源寄存器Rs中的数据送到A6为地 址的存储单元。
Page 21
格式1:Rd = IM16 说明:16位立即数送入目标寄存器Rd。 格式2:Rd = IM6 说明:6位立即数扩展为16位送入目标寄存 器Rd。 例如:R1=0xF001 //R1的值变为0xF001
Page 22
2.寄存器寻址
格式1:Rd=Rs 说明:将源寄存器Rs的数据送到目标寄存 器Rd。 例如:R2=0xF001 //R2的值为0xF001
(3)寄存器寻址:操作数包含在寄存器中, 由指令指定寄存器的名称。 (4)寄存器间接寻址:寄存器中存储的是 操作数的地址,书写指令时,寄存器需要 用“[ ]”括起来。

第03章 数据转换

第3章数据的转换在数据分析过程中,有时需要根据统计分析的需要对原始数据进行转换,生成新的变量或进行重新编码等。

可通过Transform(转换)菜单项来完成。

3.1 数据的运算有算术运算、关系运算以及逻辑运算,常用的运算为算术运算。

1、算术运算在进行数据统计分析时,有时需要根据原始数据生成新的目标变量。

例如,根据工资、奖金项求总工资,或对变量进行加(+)、减(-)、乘(*)、除(/)、乘方(幂)(**)运算,如求每人总工资,操作步骤:(1)单击Transform(转换)菜单中的Compute(计算)子菜单,弹出Compute Variable (计算变量)对话框,如图3.1。

图3.1 计算对话框(2)首先在Target Variable(目标变量)中输入一个保存计算结果的变量,这个变量可以是数据管理器中原有的变量,也可以是欲生成的新变量,如X9(总工资),然后单击Type & Label(类型和标签)按钮,定义生成数据的类型(默认为数值型)及为变量加上标签(总工资),如图3.2,单击Continue(继续)返回主对话框。

在Numeric Expression(数值表达式)框中根据系统提供的计算器键入计算公式, x7+x8 即x9=x7+x8。

(3)如果要对符合条件的观测值进行计算,可单击If...(如果)按钮,弹出Compute Variable:If Cases(案例条件)对话框,可选择Include if case satisfiescondition(包含满足下列条件) 并在文本框中输入计算条件,如只对男职工进行计算,输入条件为“X3=1”,默认为包含所有观测值(Include all cases),这里选择默认,单击Continue(继续)按钮。

图3.3 选择计算条件(4)单击确定(OK)则可看到计算结果,图 3.4 计算结果有图可见自动生成了另一变量X9(总工资),其中为每一职工的工资与奖金之和,为了显示编号、姓名、总工资项可使用Pinging(固定)命令。

第3章__S7-200_PLC的基本指令

逻辑入栈(Logic Push,LPS)指令 复制栈顶的值并将其压入栈的下一层,栈 中原来的数据依次向下一层推移,栈底值 被推出丢失,如图3-4所示。
图3-4 栈操作
逻辑读栈(Logic Read,LRD)指令 将栈中第2层的数据复制到栈顶,第2~7层 的数据不变,但是原栈顶值消失。
逻辑出栈(Logic Pop,LPP)指令使 栈中各层的数据向上移动一层,第2层的数 据成为栈新的栈顶值,栈顶原来的数据从 栈内消失。
3.1.2 置位与复位指令
1.置位与复位指令
置位/复位指令则是将线圈设计成置位 线圈和复位线圈两大部分,将存储器的置 位、复位功能分离开来。
S(Set)指令是置位指令,R(Reset) 指令是复位指令,指)指令时, 从指定的位地址开始的N个连续的位地址 都被置位或复位,N=1~255。当置位、复 位输入同时有效时,复位优先。置位/复位 指令的应用如图3-8所示,图中N=1。
保持(记忆),使能端再次接通有效时, 在原记忆值的基础上递增计时。TONR采 用线圈的复位指令进行复位操作,当复位 线圈有效时,定时器当前值清零,输出状 态位置为0。
保持型接通延时定时器应用程序如图 3-12所示。
图3-12 保持型接通延时定时器应用程序
(3)断电延时定时器
使能端输入有效时,定时器输出状态 位立即置1,当前值复位为0。使能端断开 时,开始计时,当前值从0递增,当前值达 到设定值时,定时器状态位复位置0,并停 止计时,当前值保持。
3.1.3 其他指令
1.边沿触发指令
边沿触发指令分为正跳变触发(上升 沿)和负跳变触发(下降沿)两种类型。
正跳变触发是指输入脉冲的上升沿使 触点闭合1个扫描周期。负跳变触发是指输 入脉冲的下降沿使触点闭合1个扫描周期, 常用作脉冲整形。边沿触发指令格式及功 能如表3-4所示。

第3章数据处理3算数与逻辑运算指令


CMP dest,src ;做减法运算:dest-src
根据标志状态获知两个操作数的大小关系
给条件转移等指令使用其形成的状态标志
ADD与ADC? ADD与SUB?
SUB与SBB? ADC与SBB?
INC与DEC? DEC与NEG?
现在你正浏览到当前第十四页,共二十二页。
3.5.3 乘法除法等指令
现在你正浏览到当前第十一页,共二十二页。
〔例〕大小写字母转换程序
msg again:
; 数据段 byte 'welcome',0
大写=小写-20H 小写=大写+20H
; 代码段
mov ecx,(lengthof msg)-1
; ECX等于字符串长度
mov ebx,0
; EBX=0指向头'
dc74h9100a5h9164h100加减指令只进行无符号数运算利用加减指令只进行无符号数运算利用cf和of区别无符号数和有符号数乘法指令指令类型操作数组合及功能举例无符号数乘法mulsrcaxalr8m8dxaxaxr16m16edxeaxeaxr32m32mulblimulbxmuldvar有符号数乘法imulsrc双操作数乘法imuldestsrcr16r16r16m16i8i16r32r32r32m32i8i32imuleax10imulebxecx三操作数乘法imuldestsrcimmr16r16m16i8i16r32r32m32i8i32imulaxbx2imuleaxdwordptresi85除法指令无符号除法指令div和有符号除法指令idiv除法指令可能产生除法溢出对div指令除数为0或者在字节除时商超过8位在字除时商超过16位或者双字除时超过32位则发生除法溢出对idiv指令除数为0或者在字节除时商不在128127范围内在字除时商不在3276832767范围内或者在双字除时商不在231311范围内则发生除法溢出除法错溢出将产生编号为0的内部中断除法指令指令操作数组合及功能举例无符号除法

可编程控制器_数据处理_基本运算_逻辑指令

比较指令 大于 小于 大于等于 小于等于 等于 不等于 X可以是B(字节) I(字) D(双字) R(实型数)
数据处理指令的类型
低 压 电 气 及 PLC 技 术
有字节(B)、字(W)、双字(DW)左移和右移 移位超过数据的长度时,只移位最大值(数据长度) 右移 空出的位用0填充 移位指令 左移
数据处理指令的类型
对I0.0计数; I0.1用于复归计数值; 当计数次数达到10次时输出Q0.0;
数据处理指令示例
低 压 电 气 及 PLC 技 术 不用计数器和定时器实现定时功能 要求:
在I0.0按钮按下时开始计时; I0.1用于复归定时值; 当定时时间到10S时输出Q0.0;
PLC程序数据基本概念 程序数据基本概念
低 压 电 气 及 PLC 技 术 位 1位二进制数 BIT 字节 由8位二进制数组成 1 BYTE = 8BIT 字 由16位二进制数组成 16 1 WORD = 16BIT= 2 BYTE 双字 由32位二进制数组成 1 DOUBLE WORD = 32BIT= 2 WORD =4BYTE
字节存取格式: 区域标志 B 字节的地址 如: IB1 VB5
PLC程序数据存取方法
低 压 电 气 及
起始地址第一个字节地址 第二个字节
字存取格式: 区域标志 W 字的起始地址 如: VW0 IW0 QW4
PLC
技 VW0 由那两个字节组成,由那几位组成 术 QW4 由那两个字节组成,由那几位组成
数据处理指令的种类
低 压 电 气 及 PLC 技 术 传送指令(赋值指令) 比较指令 逻辑运算指令 移位指令 循环指令 运算指令
数据处理指令的类型
低 压 数据传送指令(赋值指令) 双字
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档