汇编语言--微机CPU的指令系统(五)(比较运算指令)

(7)比较运算指令

在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能。为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令。通过这些比较指令的执行来改变有关标志位,为进行条件转移提供依据。

1、比较指令CMP(Compare Instruction)

指令的格式:CMP Reg/Mem, Reg/Mem/Imm

受影响的标志位:AF、CF、OF、PF、SF和ZF

指令的功能:用第二个操作数去减第一个操作数,并根据所得的差设置有关标志位,为随后的条件转移指令提供条件。但并不保存该差,所以,不会改变指令中的操作数。

2、比较交换指令(Compare And Exchange Instruction)

在数据传送类指令中,我们介绍了交换指令XCHG,它不管二个操作数的值是什么,都无条件地进行交换。而比较交换指令,是先进行比较,再根据比较的结果决定是否进行操作数的交换操作。

比较交换指令的功能:当二个操作数相等时,置标志位ZF为1;否则,把第一操作数的值赋给第二操作数,并置标志位ZF为0。

a) 8位/16位/32位比较交换指令

指令的格式:CMPXCHG Reg/Mem, AL/AX/EAX ;80486+

受影响的标志位:AF、CF、OF、PF、SF和ZF

b) 64位比较交换指令

该指令只有一个操作数,第二个操作数EDX:EAX是隐含的。

指令的格式:CMPXCHG8B Reg/Mem ;Pentium+

受影响的标志位:ZF

例如:假设(AX)=1234H,(BX)=1234H,(CX)=4321H。

CMPXCHG BX, AX ;指令执行后,ZF=1

CMPXCHG CX, AX ;指令执行后,ZF=0,(AX)=4321H,CX的值不变

3、字符串比较指令(Compare String Instruction)

后面学习中介绍

原文地址:https://www.cnblogs.com/CIreland/p/9961567.html

时间: 2024-10-11 03:27:19

汇编语言--微机CPU的指令系统(五)(比较运算指令)的相关文章

汇编语言--微机CPU的指令系统(五)(转移指令)

(9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有"尽量不要使用转移语句"的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令. 转移指令分无条件转移指令和有条件转移指令两大类. 1.无条件转移指令(Transfer Unconditionally) 无条件转移指令包括:JMP.子程序的调用和返回指令.中断的调用和返回指令等.

汇编语言从入门到精通-5微机CPU的指令系统2

微机CPU的指令系统 5.2.2 标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 a.清进位指令CLC(Clear Carry Flag):CF←0b.置进位指令STC(Set Carry Flag):CF←1c.进位取反指令CMC(Complement Carry Flag):CF←not CF 2.方向位DF操作指令 a.清方向位指令CLD(Clear Direction Flag):DF←0b.置方向位指令STD(Set Direct

汇编语言入门———cpu的工作原理(寄存器)

CPU构成 典型的cpu有 运算器,控制器,寄存器 等器件组成.这些器件靠内部总线相连 寄存器 寄存器是cpu内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址 8086CPU有14 个寄存器  AX , BX, CX, DX, SI, DI, SP, BP, IP, CS , SS, DS, ES , PSW 通用寄存器(8个 一般不变) 8086CPU所有的寄存器都是16位的,可以存放两个字节(1个字) AX BX CX DX 是通用寄存器,通常用来放一般性数据

汇编语言入门———cpu与存储器的配合(外部通讯)

存储器: 随机存储器(RAM) :断电以后就会丢失: 只读存储器(ROM): 公共能和链接上分为 随机存储器RAM 装有BIOS的ROM bios(基本输入输出系统),是由主板和各类接口卡(显卡 网卡)厂商提供的软件系统. 接口卡上的RAM (显存) 各类存储器的逻辑链接 内存地址空间: 一个cpu的地址线宽度是10,那么可以寻址1024个内存单元(2的10次方),这1024个可寻到的内存单元就构成了 这个cpu的内存地址空间. 在cpu看来,各类存储器是一个逻辑存储器,如下图所示 Intel

自己动手写CPU之第五阶段(4)——逻辑、移位与空指令的实现

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第18篇,我尽量每周四篇 5.5 修改OpenMIPS以实现逻辑.移位操作与空指令 为了实现逻辑.移位操作与空指令(其中nop.ssnop不用特意实现,可以认为是特殊的逻辑左移指令sll),只需要修改OpenMIPS的如下两个模块. 修改译码阶段的ID模块,用以实现对上述指令的译码. 修改执行阶段的EX模块,使其按照译码结果进行运算. 5.5.1 修改译码阶段的ID模块 首先给出如下宏定义,都在文件defines.v中定义,读者可以

自己动手写CPU之第五阶段(2)——OpenMIPS对数据相关问题的解决措施

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第16篇,我尽量每周四篇 5.2 OpenMIPS对数据相关问题的解决措施 OpenMIPS处理器采用数据前推的方法来解决流水线数据相关问题.通过补充完善图4-4原始的数据流图,添加部分信号使得可以完成数据前推的工作,如图5-7所示.主要是将执行阶段的结果.访存阶段的结果前推到译码阶段,参与译码阶段选择运算源操作数的过程. 图5-8给出了为实现数据前推而对OpenMIPS系统结构所做的修改.有两个方面. (1)将处于流水线执行阶段的

自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第17篇,我尽量每周四篇 5.4 逻辑.移位操作与空指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条:and.andi.or.ori.xor.xori.nor.lui,其中ori指令已经实现了,本章要实现其余7条指令. MIPS32指令集架构中定义的移位操作指令有6条:sll.sllv.sra.srav.srl.srlv. MIPS32指令集架构中定义的空指令有2条:nop.ssnop.其中ssnop是一种特殊类型的空操作

自己动手写CPU之第五阶段(1)——流水线数据相关问题

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,但是只实现了一条ori指令,从本章开始,将逐步完善.本章首先讨论了流水线数据相关问题,然后修改OpenMIPS以解决该问题,并在5.3节验证了解决效果.接着对逻辑.移位操作与空指令的指令格式.用法.作用进行了一一说明,在5.5节通过扩展OpenMIPS实现了这些指令,最后编写测试程序,对实现效果进行了检验. 5.1 流水线数据相关问题 我们在第4章实现的五级

自己动手写CPU之第五阶段(5)——测试逻辑、移位与空指令的实现

将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第19篇,我尽量每周四篇 5.6 测试程序1--测试逻辑操作实现效果 编写如下测试程序用于检验逻辑操作指令是否实现正确,文件名命名为inst_rom.S,在本附带光盘Code\Chapter5_2\AsmTest\LogicInstTest目录下有测试程序源文件. .org 0x0 .global _start .set noat _start: lui $1,0x0101 # $1 = 0x01010000 ori $1,$1,0