第3章数据处理(3)算数与逻辑运算指令
第三章(后篇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课件

第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课件

格式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的基本指令

图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的内部中断除法指令指令操作数组合及功能举例无符号除法
可编程控制器_数据处理_基本运算_逻辑指令

数据处理指令的类型
低 压 电 气 及 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 技 术 传送指令(赋值指令) 比较指令 逻辑运算指令 移位指令 循环指令 运算指令
数据处理指令的类型
低 压 数据传送指令(赋值指令) 双字
第3章8086指令系统(上)

或
(SS)×16+(BP)
【例3-4】 已知:(DS)=3000H,(BX)=1100H,(31100H)= 12H,(31101H)=34H,执行指令:MOV AX, [BX]。 操作数的物理地址为:(DS)×16+(BX)=3000H×16+ 1100H=31100H,指令执行后(AX)=3412H。
本章内容提要
3.1 8086指令系统入门 3.2 数据据传送类指令 3.3 算术运算与逻辑运算类指令
3.1 8086指令系统入门
3.1.1 指令分类
数据传送类指令 算术运算类指令
字符串操作指令 处理器控制类指令
逻辑运算类指令
程序控制类指令
3.1.2 指令格式
操作码 [目的操作数][,源操作数]
3.1.3 操作数寻址
ADD SI, 2 LOOP LOP MOV BX, SI MOV DI, BX MOV 1000[DI], AX
;将累加和存入1000+(DI)指 ;向的内存单元
3.2 数据传送类指令
3.2.1 传送指令
格式:MOV DST, SRC 功能:将源操作数传送给目的操作数。 ① ② ③ ④ 在CPU内部寄存器之间进行数据传送 MOV AX,BX 在CPU内部寄存器与存储器之间进行数据传送 MOV AX,[1000H] 将立即数传送给寄存器 MOV AX,1234H 将立即数传送给存储单元 MOV [1000H],1000H
【例3-15】 已知:(DS)=3000H,(32000H)=12H,(32001H)= 34H,(32002H)=56H,(32003H)=78H。 执行指令:LDS SI, [2000H]。
第三章基本指令系统

注:该指令用在多字节加法运算中。
28
例:两个4字节无符号数相加,两数分别在2000H、3000H开 始的内存单元,和放在2000H开始的4个内容单元。
MOV SI, 2000H MOV AX, [SI] MOV DI, 3000H ADD AX, [DI] MOV [SI], AX MOV AX, [SI+2] ADC AX, [DI+2] MOV [SI+2], AX ;SI指向一加数首址 2000H ;AX 8423H ;DI指向另一加数首址 ;AX 8423H+7F00H ;低16位和送[2000H][2001H] ;AX 1000H 3000H ;AX 1000H+2000H+CF ;高16位和送[2002H][2003H]
4)DST、SRC长度要一致。
MOV AL, BX ()
5) DST 不能是立即数 MOV 1000H, AX () 6)DST、SRC 不能同时为存储器寻址 MOV [1000H], [3000H] () 7)MOV指令不破坏源操作数
6
一、通用传送指令——XCHG
2、XCHG 格式:XCHG OPR1, OPR2 ; OPR1 OPR2 功能:两操作数内容相交换。 例: XCHG BL, AL ;两寄存器内容交换(字节交换)
第三章基本指令系统指令系统8086指令系统什么是指令系统cpu指令系统mcs51指令系统指令系统层指令系统的作用微处理器的指令系统指令系统就是指令吗
第三章 8086CPU基本指令系统
3.1 数据传送指令 3.2 算术运算指令
3.3 十进制调整指令
3.4 逻辑运算指令和移位指令 3.5 处理器控制指令
27
一、加法指令——ADC
逻辑运算指令课件

案例二
在决策分析中,我们可能需要比较多个方案并选择最优的一个。例如,比较三个供应商 的报价和质量,选择性价比最高的一个。这里可以使用逻辑或和逻辑与运算进行条件判
断和选择。
感谢您的观看
THANKS
示例2
假设有两个变量C和D,它们的值 分别为false和false。则C OR D的 结果为false,因为两个变量都为假。
逻辑或运算的应用场景
条件判断
在程序中,逻辑或运算常用于条件判断语句 中,以实现某些条件下的执行路径。例如, 在if语句中,可以使用逻辑或运算符来检查多 个条件中的至少一个是否满足。
数据筛选
根据多个条件进行筛选,如从数 据库中查询满足多个条件的记录 。
安全验证
在登录或支付等场景中,使用逻 辑与运算符验证用户输入的密码 、验证码等是否正确。
01
条件判断
在程序中,使用逻辑与运算符连 接多个条件,进行复杂的
在流程控制中,使用逻辑与运算 符确保所有条件都满足时,执行 相应的操作或进入特定的分支。
数据筛选
在数据处理和分析中,逻辑或运算可以用于 筛选符合多个条件的数据。通过将多个条件 用逻辑或连接,可以快速找到满足至少一个 条件的记录。
事件触发
在事件驱动的系统中,逻辑或运算可以用于 触发某些事件。例如,当传感器检测到某个 物体接近时,可以使用逻辑或运算符来比较 多个传感器的读数,以确定是否需要触发警 报或其他动作。
案例二
一个学生想要申请某大学的奖学金,需要满足多个条件(如成绩要求、社会实践经验等)。同样可以使用逻辑 与运算来确保学生满足所有申请条件。
利用逻辑运算进行数据筛选
案例一
在处理大量数据时,我们可能需要筛选出满足特定条件的数据。例如,在数据库中查找所有年龄大于 18岁且性别为女的用户,可以使用逻辑与和逻辑或运算来筛选出符合条件的数据。
03-教学课件_逻辑运算指令

“或”指令的应用
实现两操作数相“ 或 ” 的 运 算
OR AX,[DI]
使某些位不变,某些位置“ 1 ”
OR CL,0FH
在不改变操作数的 情况下使OF=CF=0
OR AX,AX
10
“或”指令的应用例
OR AL,AL JPE GOON OR AL,80H GOON:….
PF=1转移
与、或、非、异或
实现逻辑操作的指令
2
逻辑运算指令
对操作数的要求:
大多与MOV指令相同。 “ 非”运 算 指 令 要 求 操 作 数 不 能 是 立 即 数 ;
对标志位的影响
除“ 非 ” 运 算 指 令 ,其余指令的执行都会影响除AF 外的5个状 态 标志;
无论执行结果任何,都会使标志位OF=CF=0。 “ 非”运 算 指 令 的 执 行 不 影 响 标 志 位 。
11
“或”指令的应用
将一个二进制 数9变为字符 ‘9’
MOV AL,9 OR AL,30H
如何实现?
12
3.“非”运算指令
格式:
NOT OPRD
操作:
操作数按位取反再送回原地址
注:
指令的执行对标志位无影响
例:
NOT BYTE PTR[BX]
13
4.“异或”运算指令
格式:
XOR OPRD1,OPRD2
Y
取输出口地址
输出一个字
7
“与”指令应用例
MOV DX,3F8H WATT: IN AL,DX
AND AL,02H JZ WATT MOV DX,38FH MOV AX,DATA OUT DX,AX
ZF=1转移
8
2.“或”运算指令
计算机组成原理第3章-计算机指令和控制器-指令部分刘

A2 A2
A2
9
A3 A3
A3
15条二地址指令
3.1.2 指令的格式
3、扩展操作码技术—— 以指令字长16位为例
OP
A1
A2
A3
12位操作码
1111 1111
:
1111
1111 1111
1111
0000
A3
0001
A3
15条一地址指令
1110
A3
16位操作码 1111
1111
1111
1111
17
3.1.2 指令的格式
3、指令字长度(P119) 指令字长=操作码的位数+(操作数地址个数)*(操作数地 址码位数) 单字长指令——指令字长度等于机器字长度的指令 半字长指令、双字长指令、三/四字长指令、可变字长 等
4、简单指令系统的具体指令格式 ① pentium机指令 ② 嵌入式系统ARM机指令 ③ 模型指令(P121例1、例2)
已被淘汰
400
788
35
基址/变址寻址
指定一个寄存器R,其存放基址/变址,R被称为基址/变址 寄存器。
EA=(R)
MOV AX, [SI]
SI,DI 都称为变址寄存器
Mov AX,[BX]
BX是基址寄存器 内存
OP X
R
300 400
R 300
400
788
36
相对寻址
相对寻址是基址寻址的一 种变通,由程序计数器 PC提供基准地址,即
存储器地址名称:物理地址←→逻辑地址 物理地址——内存中实际地址 逻辑地址——在指令中表现形式 逻辑地址=段地址:偏移地址(8086CPU)
有效地址 EA=(R)+A
汇编语言课件第3章 算术与逻辑

2012年9月25日
16
第3章 算术与逻辑运算指令及编程
3.1 3.2 3.3 3.4 3.5 3.6
无符号数的加减法 无符号数的乘法和除法 逻辑指令 BCD和ASCII码转换 循环移位指令 C 语言的位操作(自学) C语言的位操作(自学)
2012年9月25日
17
3.4 BCD 和ASCII 码转换 BCD和 ASCII码转换
2012年9月25日
14
3.3 逻辑指令
4. SHIFT( 移位) SHIFT(移位) :适用于无符号数 ;算术移位 适应于带符号数。 移位操作包括:逻辑移位 移位操作包括:逻辑移位: 适用于无符号数; 算术移位适应于带符号数。 逻辑移位 指令。 本节讨论 本节讨论逻辑移位 逻辑移位指令。 逻辑移位指令的格式和功能 : 逻辑移位指令的格式和功能: SHR 1)逻辑右移指令 )逻辑右移指令SHR :SHR 操作数,移位次数 格式 格式: :操作数逐位 右移,每次移位后,最 高有效位 补0,最低有效位移入进位位。 功能 功能: 操作数逐位右 移,每次移位后,最高 有效位补 )逻辑左移指令 SHL 2 2)逻辑左移指令 )逻辑左移指令SHL 格式: SHL 操作数,移位次数 格式:SHL :操作数逐位 左移,每次移位后,最 低有效位 补0,最高有效位移入进位位。 功能 功能: 操作数逐位左 移,每次移位后,最低 有效位补 说明:1)操作数可以是寄存器 /存储单元 )操作数可以是寄存器/
1. 无符号的乘法 指令的格式 MUL MUL指令的格式 2( 乘数);寄存器 /内存单元 MUL 操作数 操作数2( 2(乘数);寄存器 乘数);寄存器/
1(被乘数)是累加器(字运算: AX, 字节运算为 AL ) 操作数 操作数1 (被乘数)是累加器(字运算:AX, AX,字节运算为 字节运算为AL AL) *字节: *操作数�AX 字节 字节* AL AL* *操作数�DX:AX 字*字: AX AX* AL= 字节, AH=0) : AX *操作数�DX:AX 字*字节( 字节(AL= AL=字节, 字节,AH=0) AH=0): AX*
第三章 指令系统3-算数逻辑运算

NEG指令也是一个单操作数指令。
例:
mov ax,0ff64h neg al ;AL=0-64H=9CH,AX=FF9CH sub al,9dh;AL=9CH-9DH=FFH,AX= FFFFH neg ax ;AX=0-FFFFH=0001H dec al ;AL=01H-1=0,AX=0000H neg ax ;AX=0-0=0
6、乘法和除法指令
乘法指令分无符号和有符号乘法指令
MUL reg/mem ;无符号乘法 IMUL reg/mem ;有符号乘法
除法指令分无符号和有符号除法指令
DIV reg/mem ;无符号除法 IDIV reg/mem ;有符号除法
无符号数乘法指令
乘法指令分字节(8位)乘和字(16位)乘,要求: 被乘数事先放在AL或AX中,被乘数为隐含寻址;乘数放在寄存器 或存储器单元中,指令中只显式地表示乘数。 乘积为双字长,存放于AX(8位乘)或DXAX(16位乘)中。
(2) 非压缩型十进制数调整指令
AAA ;加法ASCII调整指令 AAS ;减法ASCII调整指令
AAA和AAS分别用于加法指令(ADD、ADC)或减法指令 (SUB、SBB)之后,执行时对AL进行测试,若AL中的低四 位>09H,或AF=1,则进行AL←(AL)±06H修正;AL的 高4位为0,同时AH←(AH)±1;CF=AF=1。调整后的结 果放在AX中 .
mov ax,0ff00h
;AX=FF00H,表示有符号10进制数-256
cwd
;将符号位“1”扩展,DX.AX=FFFFFF00H ;仍然表示-256
授课班级 授课题目
授课内容
目的要求 重点 难点 作业布置 备注
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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