算术和逻辑运算指令

合集下载

单片机指令大全(二)2024

单片机指令大全(二)2024

单片机指令大全(二)引言概述:本文是关于单片机指令大全的第二部分。

在上一部分中,我们介绍了一些常用的单片机指令和其功能。

本文将继续介绍更多的单片机指令,包括数据传输、逻辑运算、算术运算、位操作以及状态寄存器等方面的指令。

这些指令将帮助您更好地理解和使用单片机。

1. 数据传输指令1.1. MOV指令:将一个数据从源操作数传送到目的操作数。

1.2. LDI指令:将一个立即数传送到一个寄存器。

1.3. LDS和STS指令:将数据从SRAM传送到寄存器或将寄存器的数据传送到SRAM。

1.4. IN和OUT指令:将数据从端口传送到寄存器或从寄存器传送到端口。

2. 逻辑运算指令2.1. AND、OR和XOR指令:进行逻辑与、逻辑或和逻辑异或运算。

2.2. NOT指令:对一个寄存器的数据进行逻辑非运算。

2.3. CLR指令:将一个寄存器的数据清零。

3. 算术运算指令3.1. ADD和SUB指令:对两个操作数进行加法或减法运算。

3.2. INC和DEC指令:对一个寄存器的数据进行加1或减1操作。

3.3. MUL和DIV指令:进行乘法和除法运算。

4. 位操作指令4.1. ANDI、ORI和XORI指令:对一个寄存器的数据进行与、或和异或运算。

4.2. SBI和CBI指令:设置或清除一个I/O端口的某个位。

4.3. SBIC和SBIS指令:跳转指令,根据指定的I/O端口位是否被设置或清除执行跳转操作。

5. 状态寄存器相关指令5.1. SEI和CLI指令:设置或清除全局中断。

5.2. SREG指令:用于保存和恢复状态寄存器的值。

5.3. IJMP和EIJMP指令:用于从程序中直接跳转到任意存储器位置。

总结:本文介绍了单片机指令大全的第二部分内容,包括数据传输、逻辑运算、算术运算、位操作以及状态寄存器等方面的指令。

这些指令的功能与用法将有助于您更好地理解和应用单片机。

通过熟练掌握这些指令,您将能够更加灵活地进行单片机程序的设计与开发。

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。

在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。

本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。

一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将寄存器BX的内容复制到AX中。

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。

例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。

例如,PUSH AX将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。

例如,POP BX将栈中的数据弹出到BX中。

二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX从AX中减去BX的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。

例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。

例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX将AX与BX进行逻辑与操作。

2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX将AX与BX进行逻辑或操作。

3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。

算术运算和逻辑运算

算术运算和逻辑运算

第二节算术运算和逻辑运算一、二进制的算术运算1、加法运算规则:0+0=0 0+1=1 1+0=1 1+1=102、减法运算规则:0-0=0 0-1=1(向高位借1) 1-0=1 1-1=03、乘法运算规则:0×0=0 0×1=0 1×0=0 1×1=1二、逻辑运算1、基本运算① 逻辑乘,也称“与”运算,运算符为“·”或“∧”0·0=0 0·1=0 1·0=0 1·1=1使用逻辑变量时,A·B可以写成AB② 逻辑加,也乘“或”运算,运算符为“+”或“∨”0+0=0 0+1=1 1+0=1 1+1=1③ 逻辑非,也称“反”运算,运算符是在逻辑值或变量符号上加“—”0 = 1 1 = 02、常用运算异或运算:A⊕B = A·B+A·B2、基本公式① 0,1律A·0=0A·1=AA+0=AA+1=1② 交换律A+B=B+AA·B=B·A③ 结合律A+B+C =(A+B)+C = A+(B+C)A·B·C =(A·B)·C = A·(B·C)④ 分配律A·(B+C)= A·B +A·C⑤ 重叠律A+A+...+A = AA·A·...·A = A⑥ 互补律A + A = 1 A·A = 0⑦ 吸收律A+A·B = A A·(A+B) = AA+A·B = A+B A·(A+B) = A·B⑧ 对合律对一个逻辑变量两次取反仍是它本身⑨ 德·摩根定理A+B = A·BA·B = A+B三、逻辑代数的应用1、逻辑表达式化简例如: F = A·B+A·B+A·B=A·B+A(B+B)(利用分配律)=A·B+A (利用互补律以及0,1律) = A+B (利用吸收律)2、对指定位进行运算,假设变量A有八位,内容是d7d6d5d4d3d2d1d0① 将变量A的d5位清零A·(11011111)→A② 将变量A的各位置1A+(11111111)→A。

8086算术、逻辑运算及移位指令

8086算术、逻辑运算及移位指令

8086算术、逻辑运算及移位指令8086是一种基于x86架构的微处理器,具有广泛应用的能力。

它支持多种算术、逻辑运算和移位指令,这些指令为编程人员提供了强大的工具来处理数据和操纵位级操作。

算术指令是8086中非常重要的一部分。

它们允许我们对数据执行各种加减乘除运算。

例如,ADD指令用于对两个数进行加法运算,这通常用于求和操作。

而SUB指令则用于执行减法运算,可用于计算差值。

MUL和DIV指令则用于执行乘法和除法操作,它们对于处理需要大量数值计算的应用程序非常有用。

逻辑运算指令也是8086中的重要组成部分。

它们用于执行与、或、非和异或等逻辑运算。

AND指令用于执行位级与运算,可以对数据的每个位进行逻辑与操作。

OR指令执行逻辑或运算,可以通过将各个位进行逻辑或操作来组合数据。

NOT指令用于执行位级非运算,将数据的每个位取反。

XOR指令执行异或运算,可以对数据的位进行逻辑异或操作。

这些逻辑运算指令非常灵活,可用于编写各种数据处理和逻辑判断的算法。

移位指令允许我们在数据的二进制位级上进行操作。

8086提供了逻辑左移、逻辑右移、算术左移和算术右移指令。

逻辑左移指令将数据在二进制位级上向左移动,相当于乘以2。

逻辑右移指令将数据在二进制位级上向右移动,相当于除以2。

算术左移和算术右移指令与逻辑移位指令类似,但在进行移位时保留了最高位的符号位,以保持有符号整数的正负性。

这些运算和移位指令在编程中起着至关重要的作用。

通过巧妙地组合使用这些指令,我们可以实现各种复杂的计算和逻辑操作。

例如,我们可以使用算术和移位指令来实现高效的乘法和除法算法,减少计算时间和资源消耗。

我们还可以使用逻辑指令来处理数据的位级运算,例如检查某一位是否为1、设置某一位为1或将某一位清零。

为了更好地理解这些指令的功能和用法,编程人员需要深入学习和实践。

通过掌握8086的算术、逻辑和移位指令,我们可以编写更高效和功能强大的程序,提高计算机应用的性能和效率。

任务6.3 FX2N系列 PLC算术及逻辑运算指令

任务6.3  FX2N系列 PLC算术及逻辑运算指令

X0
[S1.] [S2.] [D.]
ADD D0 D2 D4 D0+D2→D4
X1
[S1.] [S2.] [D.]
DADD D0 D2 D4 D1D0+D3D2→D5D4
任务6.3 FX2N系列算术及逻辑运算指令
一、加法指令
X0
[S1.] [S2.] [D.]
ADD D0 D2 D4 D0+D2→D4
任务6.3 FX2N系列算术及逻辑运算指令
19:05
五、加1指令
【案例】控制一台电动机,要求正转5s、停止5s、反转5s、停止5s,并自动循环 运行,直到停止运行。
K1M0
任务6.3 FX2N系列算术及逻辑运算指令
19:05
【案例】单按钮的功率控制程序
单按钮的功率控制线路如图所示。控制要求是:加热功率有7个挡位可调,大小 分别是0.5kW、1kW、1.5kW、2kW、2.5kW、3kW和3.5kW。有1个功率选择按钮SB1 和1个停止按钮SB2。第一次按SB1选择功率第1挡,第二次按SB1选择功率第2挡…… 第八次按SB1或按SB2时,停止加热。
任务6.3 FX2N系列算术及逻辑运算指令
【案例】算式的运算
19:05
任务6.3 FX2N系列算术及逻辑运算指令
19:05
五、加1指令 加1指令INC(Increment)的功能编号为FNC24,该指令是将指定元件中的
数值加1。
X0
[D.]
INC D0
1)加1指令的结果不影响零标志位、借位标志和进位标志。 2)如果是连续指令,则每个周期均作一次加1运算,16位运算中,+32767再 加1就变成-32768,+2147483647再加1,就会变成-2147483648。

单片机汇编程序算术逻辑运算

单片机汇编程序算术逻辑运算

单元中内容减1。
该组指令的操作不影响PSW。
2021/5/
单片机原理B及a接ck口技术
8、 十进制调整指令(1条)
汇编指令格式 DA A;
机器码格式 1101 0100
操作
若 (A0-3)>9或AC=1,则(A0-3)+6→A0-3 同时,若(A4-7)>9或CY=1,则(A4-7)+6→A4-7
SUBB A,direct;1001 0101 (A) -CY -(direct) →A direct
SUBB A,@Ri; 1001 011i (A) -CY -((Ri)) →A
SUBB A, #data; 1001 0100 (A) -CY -#data →A data
注释 将工作寄存器内容与CY及 累加器A中的数相减, “差”存放于累加器A中 将内部RAM单元内容与 CY及累加器A中的数相减, “差”存放于累加器A中 将间接寻址(Ri为R0或R1)
结果为:(A)=74H 标志位为:Cy=0 AC=0 OV=1 P=0
2021/5/
单片机原理B及a接ck口技术
4、 乘法指令(1条)
汇编指令格式
机器码格式
操作
MUL AB

1010 0100 (A)×(B)→B15-8A7-0
该指令将累加器A和寄存器B中两个无符号数相乘,所得160111B(即67的BCD码),CY内容为1。求执行下列
指令后的结果。
ADDC A,R3;
DA A;
解:先执行ADDC A,R3; (A): 0101 0110 BCD:56
(R3): 0110 0111 BCD:67 (+)(CY): 0000 0001 BCD:01

二、算术逻辑运算指令

二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
MOV ADD DA MOV MOV ADDC DA MOV
A,50H A,60H A 40H,A A,51H A,61H A 41H,A
;(A)←(50H) ;(A)←(A)+(60H) ;BCD码修正
二、算术运算指令 ⑷加1指令
• • • • • INC INC INC INC INC A Rn direct @Ri DPTR ;(A)←(A)+1 ;(Rn)←(Rn)+1 ;(direct)←(direct)+1 ;((Ri))←((Ri))+1 ;(DPTR)←(DPTR)+1
• 功能是将累加器A内容减去源地址单元内容,再减去 进位位Cy的内容,结果放入累加器A中 • 问题:如何应用此指令对两个单字节数相减?
二、算术运算指令
•主要用于多字节数的减法 如果要进行单字节或多字节数低8位数的减法运算,应先 清除进位位Cy。 • 对于PSW的影响CY、AC、OV、P • 例3-15:设累加器A的内容为0C9H,寄存器R2内容为 54H,进位标志Cy=1,执行指令:SUBB A,R2
二、算术运算指令
⑵减1 指令 • • • • DEC DEC DEC DEC A ;(A)←(A)-1 Rn ;(Rn)←(Rn)-1 direct ;(direct)←(diect)-1 @Ri ;((Ri))←((Ri))-1
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
二、算术运算指令
• (3) 二-十进制调正指令(BCD码修正指令) DA A ; • 若[(A3~0)>9]或[(AC)=1] 则(A3~0)←(A3~0)+06H; 若[(A7~4)>9]或[(Cy)=1] 则(A7~4)←(A7~4)+60H 注: • 本指令不能单独使用,只能用在加法指令之后 • 本指令不能直接用于十进制数减法的调正 • 本指令不能简单的把累加器A中的16进制数变换成 BCD码

三菱FX系列PLC功能指令-算术与逻辑运算指令

三菱FX系列PLC功能指令-算术与逻辑运算指令

3)WAND、WOR、WXOR指令16位运算占7个程序步,32位为13个程序步,而NEG分别占3步和5步。
图1 加法指令的使用
减法指令SUB (D)SUB(P)
(2)减法指令SUB (D)SUB(P)指令的编号为FNC21。它是将[S1.]指定元件中的内容以二进制形式减去[S2.]指定元件的内容,其结果存入由[D.]指定的元件中。如图2所示,当X0为ON时,执行(D10)—(D12)→(D14)。
逻辑或指令WOR (D) WOR (P)
(2)逻辑或指令WOR (D) WOR (P)指令的编号为FNC27。它是对二个源操作数按位进行或运算,结果送指定元件。如图4-48所示,当X1有效时,(D10)∨(D12)→(D14)
逻辑异或指令WXOR(P)
(3)乘法指令MUL (D) MUL (P)指令的编号为FNC22。数据均为有符号数。如图3所示,当X0为ON时,将二进制16位数[S1.]、[S2.]相乘,结果送[D.]中。D为32位,即(D0)×(D2)→(D5,D4)(16位乘法);当X1为ON时,(D1,D0)×(D3,D2)→(D7,D6,D5,D4)(32位乘法)。
WAND、WOR、WXOR和NEG指令的使用如图6所示。
图6 逻辑运算指令的使用
使用逻辑运算指令时应该注意:
1)WAND、WOR和WXOR指令的[S1.]和[S2.]均可取所有的数据类型,而目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。
2)NEG指令只有目标操作数,其可取KnY、KnM、KnS、T、C、D、V和Z。
三菱FX系列PLC功能指令-算术与逻辑运算指令 2010-07-27 19:01:13| 分类: 三菱PLC | 标签: |举报 |字号大

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语言指令大全X86和X87汇编指令大全(带注释)

汇编语⾔指令⼤全X86和X87汇编指令⼤全(带注释)⽬录⼀、数据传输指令1. 通⽤数据传送指令.2. 输⼊输出端⼝传送指令.3. ⽬的地址传送指令.4. 标志传送指令.⼆、算术运算指令三、逻辑运算指令四、串指令五、程序转移指令六、伪指令七、处理机控制指令:标志处理指令浮点运算指令集1、控制指令2、数据传送指令3、⽐较指令4、运算指令其它1.机械码,⼜称机器码.2.需要熟练掌握的全部汇编知识(只有这么多)3.常见修改(机器码)4.两种不同情况的不同修改⽅法⼀、数据传输指令它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.(⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.(第⼆个操作数必须为累加器AL/AX/EAX)XADD 先交换再累加.(结果在第⼀个操作数⾥)XLAT 字节查表转换.----BX指向⼀张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL)2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEG 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),IMUL 整数乘法.结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).IDIV 整数除法.结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04 SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量.Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1. ⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF 过程返回.2. 条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3. 循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4. 中断指令INT 中断指令INTO 溢出中断IRET 中断返回5. 处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建⽴段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CMC 进位位求反指令STC 进位位置为1指令CLD ⽅向标志置1指令STD ⽅向标志位置1指令CLI 中断标志置0指令STI 中断标志置1指令NOP ⽆操作HLT 停机WAIT 等待ESC 换码LOCK 封锁浮点运算指令集1、控制指令(带9B的控制指令前缀F变为FN时浮点不检查,机器码去掉9B)FINIT 初始化浮点部件机器码 9B DB E3FCLEX 清除异常机器码 9B DB E2FDISI 浮点检查禁⽌中断机器码 9B DB E1FENI 浮点检查禁⽌中断⼆机器码 9B DB E0WAIT 同步CPU和FPU 机器码 9BFWAIT 同步CPU和FPU 机器码 D9 D0FNOP ⽆操作机器码 DA E9FXCH 交换ST(0)和ST(1) 机器码 D9 C9FXCH ST(i) 交换ST(0)和ST(i) 机器码 D9 C1iiiFSTSW ax 状态字到ax 机器码 9B DF E0FSTSW word ptr mem 状态字到mem 机器码 9B DD mm111mmmFLDCW word ptr mem mem到状态字机器码 D9 mm101mmmFSTCW word ptr mem 控制字到mem 机器码 9B D9 mm111mmmFLDENV word ptr mem mem到全环境机器码 D9 mm100mmmFSTENV word ptr mem 全环境到mem 机器码 9B D9 mm110mmmFRSTOR word ptr mem mem到FPU状态机器码 DD mm100mmmFSAVE word ptr mem FPU状态到mem 机器码 9B DD mm110mmmFFREE ST(i) 标志ST(i)未使⽤机器码 DD C0iiiFDECSTP 减少栈指针1->0 2->1 机器码 D9 F6FINCSTP 增加栈指针0->1 1->2 机器码 D9 F7FSETPM 浮点设置保护机器码 DB E42、数据传送指令FLDZ 将0.0装⼊ST(0) 机器码 D9 EEFLD1 将1.0装⼊ST(0) 机器码 D9 E8FLDPI 将π装⼊ST(0) 机器码 D9 EBFLDL2T 将ln10/ln2装⼊ST(0) 机器码 D9 E9FLDL2E 将1/ln2装⼊ST(0) 机器码 D9 EAFLDLG2 将ln2/ln10装⼊ST(0) 机器码 D9 ECFLDLN2 将ln2装⼊ST(0) 机器码 D9 EDFLD real4 ptr mem 装⼊mem的单精度浮点数机器码 D9 mm000mmmFLD real8 ptr mem 装⼊mem的双精度浮点数机器码 DD mm000mmmFLD real10 ptr mem 装⼊mem的⼗字节浮点数机器码 DB mm101mmmFILD word ptr mem 装⼊mem的⼆字节整数机器码 DF mm000mmmFILD dword ptr mem 装⼊mem的四字节整数机器码 DB mm000mmmFILD qword ptr mem 装⼊mem的⼋字节整数机器码 DF mm101mmmFBLD tbyte ptr mem 装⼊mem的⼗字节BCD数机器码 DF mm100mmmFST real4 ptr mem 保存单精度浮点数到mem 机器码 D9 mm010mmmFST real8 ptr mem 保存双精度浮点数到mem 机器码 DD mm010mmmFIST word ptr mem 保存⼆字节整数到mem 机器码 DF mm010mmmFIST dword ptr mem 保存四字节整数到mem 机器码 DB mm010mmmFSTP real4 ptr mem 保存单精度浮点数到mem并出栈机器码 D9 mm011mmmFSTP real8 ptr mem 保存双精度浮点数到mem并出栈机器码 DD mm011mmmFSTP real10 ptr mem 保存⼗字节浮点数到mem并出栈机器码 DB mm111mmmFISTP word ptr mem 保存⼆字节整数到mem并出栈机器码 DF mm011mmmFISTP dword ptr mem 保存四字节整数到mem并出栈机器码 DB mm011mmmFISTP qword ptr mem 保存⼋字节整数到mem并出栈机器码 DF mm111mmmFBSTP tbyte ptr mem 保存⼗字节BCD数到mem并出栈机器码 DF mm110mmmFCMOVB ST(0),ST(i) <时传送机器码 DA C0iiiFCMOVBE ST(0),ST(i) <=时传送机器码 DA D0iiiFCMOVE ST(0),ST(i) =时传送机器码 DA C1iiiFCMOVNB ST(0),ST(i) >=时传送机器码 DB C0iiiFCMOVNBE ST(0),ST(i) >时传送机器码 DB D0iiiFCMOVNE ST(0),ST(i) !=时传送机器码 DB C1iiiFCMOVNU ST(0),ST(i) 有序时传送机器码 DB D1iiiFCMOVU ST(0),ST(i) ⽆序时传送机器码 DA D1iii3、⽐较指令FCOM ST(0)-ST(1) 机器码 D8 D1FCOMI ST(0),ST(i) ST(0)-ST(1) 机器码 DB F0iiiFCOMIP ST(0),ST(i) ST(0)-ST(1)并出栈机器码 DF F0iiiFCOM real4 ptr mem ST(0)-实数mem 机器码 D8 mm010mmmFCOM real8 ptr mem ST(0)-实数mem 机器码 DC mm010mmmFICOM word ptr mem ST(0)-整数mem 机器码 DE mm010mmmFICOM dword ptr mem ST(0)-整数mem 机器码 DA mm010mmmFICOMP word ptr mem ST(0)-整数mem并出栈机器码 DE mm011mmmFICOMP dword ptr mem ST(0)-整数mem并出栈机器码 DA mm011mmmFTST ST(0)-0 机器码 D9 E4FUCOM ST(i) ST(0)-ST(i) 机器码 DD E0iiiFUCOMP ST(i) ST(0)-ST(i)并出栈机器码 DD E1iiiFUCOMPP ST(0)-ST(1)并⼆次出栈机器码 DA E9FXAM ST(0)规格类型机器码 D9 E54、运算指令FADD 把⽬的操作数 (直接接在指令后的变量或堆栈缓存器) 与来源操作数 (接在⽬的操作数后的变量或堆栈缓存器) 相加,并将结果存⼊⽬的操作数FADDP ST(i),ST 这个指令是使⽬的操作数加上 ST 缓存器,并弹出 ST 缓存器,⽽⽬的操作数必须是堆栈缓存器的其中之⼀,最后不管⽬的操作数为何,经弹出⼀次后,⽬的操作数会变成上⼀个堆栈缓存器了FIADD FIADD 是把 ST 加上来源操作数,然后再存⼊ ST 缓存器,来源操作数必须是字组整数或短整数形态的变数FSUB 减FSUBPFSUBR 减数与被减数互换FSUBRPFISUBFISUBRFMUL 乘FMULPFIMULFDIV 除FDIVPFDIVRFDIVRPFIDIVFIDIVRFCHS 改变 ST 的正负值FABS 把 ST 之值取出,取其绝对值后再存回去。

8086 8088 汇编 指令 手册

8086 8088 汇编 指令 手册

8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介: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)。

它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。

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

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

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

add,sub,and,or,xor指令的使用

add,sub,and,or,xor指令的使用

add、sub、and、or、xor是一些常见的计算机指令,通常用于执行基本的算术和逻辑运算。

这些指令的具体用法可能取决于计算机体系结构和汇编语言的规范。

下面是这些指令的一般用法:1. add指令(加法):add指令用于执行加法操作。

它将两个数相加,并将结果存储在指定的目标寄存器中。

▪destination:目标寄存器,用于存储相加的结果。

▪source1、source2:要相加的源操作数。

2. sub指令(减法):sub指令用于执行减法操作。

它从第一个源操作数中减去第二个源操作数,并将结果存储在指定的目标寄存器中。

▪destination:目标寄存器,用于存储相减的结果。

▪source1:被减数。

▪source2:减数。

3. and指令(按位与):and指令执行按位与操作,将两个操作数的对应位进行与运算,并将结果存储在目标寄存器中。

▪destination:目标寄存器,用于存储按位与的结果。

▪source1、source2:进行按位与的源操作数。

4. or指令(按位或):or指令执行按位或操作,将两个操作数的对应位进行或运算,并将结果存储在目标寄存器中。

▪destination:目标寄存器,用于存储按位或的结果。

▪source1、source2:进行按位或的源操作数。

5. xor指令(按位异或):xor指令执行按位异或操作,将两个操作数的对应位进行异或运算,并将结果存储在目标寄存器中。

▪destination:目标寄存器,用于存储按位异或的结果。

▪source1、source2:进行按位异或的源操作数。

这些指令的确切使用方式可能会根据特定的计算机体系结构和汇编语言而有所不同。

在实际编程中,请参考相关的体系结构文档或汇编语言手册以获取详细信息。

单片机指令的算术和逻辑运算

单片机指令的算术和逻辑运算

单片机指令的算术和逻辑运算在计算机科学与电子工程领域,单片机指令的算术和逻辑运算是非常重要的内容。

本文将深入探讨单片机指令的算术和逻辑运算,介绍其基本原理、应用场景以及相关的编程技巧。

一、算术运算算术运算主要包括加法、减法、乘法和除法。

在单片机中,这些运算由相应的指令来实现。

以加法为例,单片机通常使用ADD指令来执行此操作。

ADD指令可以将两个操作数相加,并将结果存储在目标寄存器中。

类似地,SUB指令用于减法运算,MUL指令用于乘法运算,DIV指令用于除法运算。

除了基本的算术运算指令,单片机还提供了其他相关的指令,如累加指令(INC)和累减指令(DEC)。

这些指令用于对寄存器或内存中的数值进行自增或自减操作。

通过结合这些指令,开发者可以灵活地进行各种复杂的算术运算。

除了整数运算外,单片机还支持浮点数运算。

浮点数是一种表示实数的方法,包括小数部分和指数部分。

单片机中的浮点数运算通常由相应的指令库来实现。

这些指令库提供了一系列的浮点数运算指令,如浮点数加法指令、浮点数乘法指令等。

通过使用这些指令,单片机可以高效地进行复杂的浮点数计算,满足各种实际应用的需求。

二、逻辑运算逻辑运算主要包括与、或、非、异或等操作。

在单片机中,逻辑运算由相应的指令来实现。

以与运算为例,单片机通常使用AND指令来执行此操作。

AND指令可以将两个操作数的对应位进行与运算,并将结果存储在目标寄存器中。

类似地,OR指令用于或运算,NOT指令用于非运算,XOR指令用于异或运算。

逻辑运算在单片机编程中被广泛应用。

它们可以用于条件判断、位操作、数据处理等多个方面。

例如,在某些应用场景下,我们需要对某个输入信号进行判断,并根据判断结果来执行相应的操作。

这时,我们可以利用逻辑运算指令来进行条件判断,并根据判断结果来选择不同的执行路径。

此外,逻辑运算还可以用于位操作。

位操作主要涉及对数据的位进行开关操作,如位与、位或、位取反等。

通过逻辑运算指令,我们可以实现对数据位的精确控制,提高程序的效率和可靠性。

算术与逻辑运算指令

算术与逻辑运算指令

[D]:KnY、KnM、KnS、T、C、D、V,Z
❖ 梯形图
X0
[S1] [S2] [D]
MUL D0 D2 D4
X1
[S1] [S2] [D]
DDIV D10 D12 D14
被乘数 乘数 (D0)×(D2)
积 (D5D4)
被除数
除数

余数
(D11D10)÷(D13D12) (D15D14)···(D17D16)
一、二进制加减运算指令
❖ 说明 ➢ 该指令可以进行连续/脉冲执行方式。
注意连续与脉冲方式的区别: 连续方式:则每个扫描周期都加/减1; 脉冲方式:当X1=ON时,只加/减一次1.
二、二进制乘除运算指令
乘法 FNC22 MUL
减法 FNC23 DIV
❖ 操作数
[S1]、[S2]:K、H、KnX、KnY、KnM、KnS、T、C、D、 V,Z
FNC29 NEG
算术与逻辑运算指令
一、二进制加减运算指令
加法 FNC20 ADD
减法 FNC21 SUB
❖ 操作数
[S1]、[S2]:K、H、KnX、KnY、KnM、KnS、T、C、D、 V,Z
[D]:KnY、KnM、KnS、T、C、D、V,Z
❖ 梯形图
X0
X1
[S1] [S2] [D]
ADD D0 D2 D4
(D10) ∨ (D12) →(D14)
(D14) →(D14)
四、逻辑运算指令
❖ 说明 ➢ 各数据的对应位进行二进制与、或、异或运算。 ➢ 32位数据运算时,助记符为DAND、DOR、DXOR。 ➢ 指令运算规则如下:
逻辑与 1 ∧1= 1 1 ∧0= 0 0 ∧1= 0 0 ∧0= 0

三菱PLC指令大全

三菱PLC指令大全
BIN32位数Байду номын сангаас→字符串转换
DSTR(P)(_U)
单精度实数→字符串转换
ESTR(P)/DESTR(P)
Unicode字符串→移位JIS字符串转换
WS2SJIS(P)
移位JIS字符串→Unicode字符串转换(无字节顺序标志)
SJIS2WS(P)
字符串的长度检测
LEN(P)
移位JIS字符串→Unicode转换(有字节顺序标志)
二.逻辑运算指令
16位数据逻辑积
WAND(P)
32位数据逻辑积
DAND(P)
16位块数据逻辑积
BKAND(P)
16位数据逻辑和
WOR(P)
32位数据逻辑和
DOR(P)
16位块数据逻辑和
BKOR(P)
16位数据异或
WXOR(P)
32位数据异或
DXOR(P)
16位块数据异或
BKXOR(P)
16位数据异或非
有符号BIN32位数据→无符号BIN32位数据转换
DINT2UDINT(P)
无符号BIN32位数据→有符号BIN16位数据转换
UDINT2INT(P)
无符号BIN32位数据→无符号BIN16位数据转换
UDINT2UINT(P)
无符号BIN32位数据→有符号BIN32位数据转换
UDINT2DINT(P)
UINT2INT(P)
无符号BIN16位数据→有符号BIN32位数据转换
UINT2DINT(P)
无符号BIN16位数据→无符号BIN32位数据转换
UINT2UDINT(P)
有符号BIN32位数据→有符号BIN16位数据转换
DINT2INT(P)

汇编指令大全

汇编指令大全

汇编指令大全汇编指令是计算机程序设计中的重要组成部分,它是一种低级语言,直接操作计算机硬件,能够对计算机进行精细的控制。

在学习汇编语言时,掌握各种指令是非常重要的,因为它们是编写高效、精确的程序的基础。

本文将对常用的汇编指令进行介绍,帮助读者更好地理解和运用汇编语言。

1. 数据传送指令。

数据传送指令用于在寄存器和内存之间传送数据,常见的指令包括MOV、XCHG等。

MOV指令用于将数据从一个位置复制到另一个位置,XCHG指令用于交换两个位置的数据。

这些指令在编写程序时经常用到,能够实现数据的传递和交换。

2. 算术运算指令。

算术运算指令用于对数据进行加减乘除等数学运算,常见的指令包括ADD、SUB、MUL、DIV等。

ADD指令用于加法运算,SUB指令用于减法运算,MUL指令用于乘法运算,DIV指令用于除法运算。

这些指令能够对数据进行各种数学运算,是编写复杂程序时不可或缺的指令。

3. 逻辑运算指令。

逻辑运算指令用于对数据进行逻辑运算,常见的指令包括AND、OR、NOT、XOR等。

AND指令用于按位与运算,OR指令用于按位或运算,NOT指令用于按位取反,XOR指令用于按位异或运算。

这些指令能够对数据进行逻辑运算,常用于程序中的逻辑判断和条件运算。

4. 跳转指令。

跳转指令用于改变程序的执行顺序,常见的指令包括JMP、JE、JNE、JG等。

JMP指令用于无条件跳转,JE指令用于相等时跳转,JNE指令用于不相等时跳转,JG指令用于大于时跳转。

这些指令能够实现程序的条件分支和循环控制,是编写复杂逻辑的关键指令。

5. 存储器访问指令。

存储器访问指令用于对存储器进行读写操作,常见的指令包括PUSH、POP、LEA等。

PUSH指令用于将数据压入堆栈,POP指令用于将数据弹出堆栈,LEA 指令用于加载有效地址。

这些指令能够对存储器进行高效的读写操作,是程序设计中不可或缺的指令。

6. 输入输出指令。

输入输出指令用于与外部设备进行数据交换,常见的指令包括IN、OUT等。

了解不同类型的计算机操作指令

了解不同类型的计算机操作指令

了解不同类型的计算机操作指令计算机操作指令是一种用于让计算机执行特定任务的命令或指令。

不同类型的计算机操作指令可以根据其功能和作用进行分类。

本文将介绍几种常见的计算机操作指令类型,以帮助读者更好地了解和使用计算机。

一、数据传输指令数据传输指令是用于在计算机内部进行数据传输的命令。

它们可以将数据从一个存储位置复制到另一个存储位置。

例如,MOV(Move)指令用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。

数据传输指令对于处理计算机中的数据十分重要,可以帮助程序在不同的存储单元之间传输数据。

二、算术指令算术指令是用于进行算术运算的指令。

它们可以执行诸如加法、减法、乘法和除法等基本算术运算。

算术指令对于进行数值计算和数据处理非常关键。

例如,ADD(Addition)指令用于执行两个操作数的加法运算,SUB(Subtraction)指令用于执行两个操作数的减法运算。

三、逻辑指令逻辑指令是用于进行逻辑运算的指令。

它们可以执行与、或、非和异或等逻辑运算操作。

逻辑指令通常用于处理布尔值和逻辑判断。

例如,AND(And)指令用于执行两个操作数的与运算,OR(Or)指令用于执行两个操作数的或运算。

四、分支指令分支指令是用于控制程序流程的指令。

它们可以根据特定条件改变程序的执行路径。

分支指令通常用于实现条件判断和循环结构。

例如,JMP(Jump)指令用于无条件跳转到指定地址,JZ(Jump If Zero)指令用于在结果为零时跳转到指定地址。

五、子程序指令子程序指令是用于调用和执行子程序的指令。

它们可以将程序的执行控制权转移到另一个子程序中,并在完成后返回到原始程序。

子程序指令对于实现模块化和重用代码非常重要。

例如,CALL(Call)指令用于调用一个子程序,RET(Return)指令用于返回到调用子程序的位置。

通过了解不同类型的计算机操作指令,我们可以更好地理解计算机的工作原理和功能。

同时,熟悉这些操作指令也可以帮助我们编写更高效、更可靠的计算机程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章算术和逻辑运算指令罗文坚中国科大计算机学院/~wjluo/mcps/本章内容•加法、减法和比较指令•乘法和除法指令•BCD码和ASCII码算术运算指令•基本逻辑运算指令•移位和循环移位指令•串比较指令加法格式ADD REG/MEM, REG/MEM/IMM功能源操作数、目的操作数相加,结果存入目的操作数标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响带进位加格式ADC REG/MEM, REG/MEM/IMM功能源操作数、目的操作数以及进位标志CF相加,结果存入目的操作数标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响加1格式INC REG/MEM功能目的操作数加1标志除CF标志位,其余状态标志都受影响交换并相加格式XADD REG/MEM, REG功能(80486以上)源操作数和目的操作数相交换,并将两者之和存入目的操作数标志所有状态标志都受影响,根据加法结果设置•加法指令注意事项:1.源操作数和目的操作数不能同时为内存单元(MEM)。

2.不允许与段寄存器(SREG)相关的加法。

3.XADD指令的源操作数在寄存器(REG)中。

4.标志寄存器中状态位随运算结果而变化,但INC指令不影响CF标志。

5.指令中操作数是带符号数还是无符号数由程序员解释。

注意:第4章的数据传送指令不改变状态标志。

Example 1•例、试用加法指令对两个8位16进制数5EH 和3CH 求和,并分析加法运算指令执行后对标志位的影响。

•解:MOV AL, 5EH ;AL=5EH (94)MOV BL, 3CH ;BL=3CH (50)ADD AL, BL ;结果AL=9AH 101010011100001111100101 运算后标志:ZF=0, AF=1, CF=0, SF=1, PF=1, OF=1。

•若程序员认为两个加数是无符号数,则运算结果位9AH ,即154。

✓此时,SF 标志和OF 标志没有意义。

•若程序员认为两个加数是有符号数,则运算溢出,结果无效。

✓此时,CF 标志没有意义。

CF标志和OF标志•当加减运算结果的最高有效位有进位(加法)或借位(减法)时,CF标志置1,即CF=1;否则CF=0。

–针对无符号整数,判断加减结果是否超出表达范围。

–N个二进制位表达无符号整数的范围:0~2N-1•有符号数加减结果有溢出,则OF=1;否则OF=0。

–针对有符号整数,判断加减结果是否超出表达范围。

•N个二进制位表达有符号整数的范围:-2N-1~2N-1-1进位标志CF:举例•8位二进制数相加:00111010+01111100=10110110•十六进制表达:3A+7C=B6•转换成十进制数:58+124=1820<182<255•没有产生进位:CF=0•8位二进制数相加:10101010+01111100=[1]00100110•十六进制表达:AA+7C=[1]26•转换成十进制数:170+124=294=256+38•产生进位:CF=1进位1表达256溢出标志OF:举例•8位二进制数相加:00111010+01111100=10110110•十六进制表达:3A+7C=B6•转换成十进制数:58+124=182182>127•超出范围:OF=1•8位二进制数相加:10101010+01111100=[1]00100110•十六进制表达:AA+7C=[1]26•转换成十进制数:-86+124=38•没有超出范围:OF=0补码AAH表达-86Example 2•设一个学生的三门课的成绩分别为60、65、90,入学分数线为总分256分,判断该学生是否取得入学资格。

;采用无符号数表示MOV AL, 60ADD AL, 65ADD AL, 90JC PASS;超过256分?……PASS:……;取得入学资格•设张三在海拔60米的地点,他先往上走了65米,然后又往上走了90米,请问他现在所在地点的海拔高度?;为便于表示低于海平面的;情况,采用有符号数表示MOV AL, 60ADD AL, 65JO ERROR;(AL)=01111101ADD AL, 90JO ERROR;(AL)=11010111……ERROR:……;错误处理进位和溢出的区别•进位标志反映无符号整数运算结果是否超出范围–有进位,加上进位或借位后运算结果仍然正确•溢出标志反映有符号整数运算结果是否超出范围–有溢出,运算结果已经不正确•处理器按照无符号整数求得结果–在设置进位标志CF的同时,根据是否超出有符号整数的范围设置溢出标志OF。

•应该利用哪个标志,由程序员决定!–操作数是无符号数,关心进位–操作数是有符号数,注意溢出溢出标志的判断•处理器硬件判断规则–最高位和次高位同时有进位或同时无进位,无溢出;最高位和次高位进位状态不同,有溢出•人工判断的简单规则–只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,不会产生溢出00111010+0111110010110110正数正数负数最高位次高位奇偶标志PF (Parity Flag )•当运算结果最低8位中“1”的个数为零或偶数时,PF =1;否则PF =0举例•8位二进制数相加:00111010+01111100=10110110“1”的个数为5个:PF =0•8位二进制数相加:10000100+01111100=[1]00000000“1”的个数为0个:PF =1结果进位the least-significant byte中“1”的个数零标志ZF(Zero Flag)•运算结果为0,则ZF=1,否则ZF=0结果是0,ZF标志不是0 !举例•8位二进制数相加:00111010+01111100=10110110结果不是0,ZF=0•8位二进制数相加:10000100+01111100=[1]00000000结果是0,ZF=1结果进位符号标志SF(Sign Flag)•运算结果最高位为1,则SF=1;否则SF=0。

最高位=符号位=SF 举例•8位二进制数相加:00111010+01111100=10110110最高位=1:SF=1•8位二进制数相加:10000100+01111100=[1]00000000最高位=0:SF=0结果进位辅助进位标志(Auxiliary Carry)•AF(Auxiliary Carry):辅助进位标志。

–用于标志D3向D4位之间的进位(加法运算)或借位(减法运算)的状态。

–AF标志供DAA和DAS指令使用,以便在BCD码的加法或减法之后对AL中的结果值进行十进制调整。

Example 3•例、32位CPU中,实现64位加法。

–把ARRAY1地址开始的四个字(低字在前)和ARRAY2地址开始的四个字相加,和存放在ARRAY1开始处。

高32位低32位高32位低32位ARRAY1 ARRAY2低地址高地址程序段•MOV ESI , OFFSET ARRAY1 ; 取第一个数的首地址•MOV EAX, [ESI] ; 将第一个数的低32位送AX•MOV EDI, OFFSET ARRAY2 ; 取第二个数的首地址•ADD EAX, [EDI] ; 第一个数的低32位和第2个数的低32位相加(不加CF,但此条指令的执行影响CF)•MOV [ESI], EAX; 存低32位相加结果•MOV EAX, [ESI+4];•ADC EAX, [EDI+4]; 两个高32位连同CF(低32位相加形成的)相加.•MOV [ESI+4], EAX; 存高32位相加结果.思考:128位整数相加/减?Example 4•MOV BL, 12H•MOV DL, 02H•XADD BL, DL;BL=14H, DL=12H减法指令减法格式SUB REG/MEM, REG/MEM/IMM功能目的操作数—源操作数,结果存入目的操作数标志所有状态标志(ZF、CF、PF、AF、SF 及OF)都受影响带借位减格式SBB REG/MEM, REG/MEM/IMM功能目的操作数—源操作数—进位标志CF,结果存入目的操作数标志所有状态标志都受影响减1格式DEC REG/MEM功能目的操作数减1标志除CF标志位,其余状态标志都受影响减法指令•减法指令注意事项与加法指令类似:1.源操作数和目的操作数不能同时为内存单元(MEM)。

2.不允许与段寄存器(SREG)相关的减法。

3.标志寄存器中状态位随运算结果而变化,但DEC指令不影响CF标志。

4.指令中操作数是带符号数还是无符号数由程序员解释。

Example•SUB CL, BL•SUB DH, 4FH•SUB AX, SP•SUB DI, TEMP[ESI]•DEC QWORD PTR [RSI]•SBB BYTE PTR [DI], 3比较格式CMP REG/MEM, REG/MEM/IMM功能目的操作数减去源操作数源操作数、目的操作数相减不能同时为内存单元。

标志影响ZF、CF、PF、AF、SF 及OF 。

比较交换格式CMPXCHG REG/MEM, REG功能(80486以上) 比较目的操作数与AL、AX 、EAX 或RAX寄存器中的值。

如果两个值相等,则将源操作数加载到目的操作数。

否则,将目标操作数加载到AL、AX、EAX 或RAX。

标志如果目标操作数与AL、AX 、EAX 或RAX中的值相等,则置ZF 标志,否则清除此标志。

CF、PF、AF、SF 及OF 标志根据比较操作的结果设置。

比较并交换8 字节格式CMPXCHG8B MEM64功能(Pentium以上)比较目的操作数和EDX:EAX 中的64 位值。

如果这两个值相等,则将ECX:EBX中的64位值存储到目的操作数。

否则,将目标操作数的值加载到EDX:EAX。

目标操作数是8 字节内存位置。

EDX 与ECX 包含64 位值的32 个高位,EAX 与EBX 包含32 个低位。

标志如果两值相等,ZF=1,否则ZF=0;CF、PF、AF、SF 及OF 标志不受影响。

比较并交换16 字节格式CMPXCHG16B MEM128功能与CMPXCHG8B类似,但寄存器为RDX:RAX,RCX:RBX。

但是,要求MEM128是16-byte对齐。

标志与CMPXCHG16B一样。

Example•CMP CL, BL•CMP EBP, ESI•CMP RDI, RSI•CMP AX, 2000H•CMP R10W, 12H•CMP [DI], CH•CMP DI, TEMP[BX]•CMPCHG CX, DX•CMPXCHG8B TEMP本章内容•加法、减法和比较指令•乘法和除法指令•BCD码和ASCII码算术运算指令•基本逻辑运算指令•移位和循环移位指令•串比较指令无符号乘法格式MUL REG/MEM功能8位:源操作数与AL相乘,乘积在AX16位:源操作数与AX相乘,乘积在DX:AX32位:源操作数与EAX相乘,乘积在EDX:EAX64位:源操作数与RAX相乘,乘积在RDX:RAX标志影响OF及CF,其余状态标志ZF、PF、AF、SF 不确定。

相关文档
最新文档