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

微机CPU的指令系统

5.2.2 标志位操作指令

标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。

1、进位CF操作指令

a、清进位指令CLC(Clear Carry Flag):CF←0
b、置进位指令STC(Set Carry Flag):CF←1
c、进位取反指令CMC(Complement Carry Flag):CF←not CF

2、方向位DF操作指令

a、清方向位指令CLD(Clear Direction
Flag):DF←0
b、置方向位指令STD(Set Direction Flag):DF←1

3、中断允许位IF操作指令

a、清中断允许位指令CLI(Clear Interrupt
Flag):IF←0
    其功能是不允许可屏蔽的外部中断来中断其后程序段的执行。

b、置中断允许位指令STI(Set Interrupt
Flag):IF←1
    其功能是恢复可屏蔽的外部中断的中断响应功能,通常是与CLI成对使用的。

4、取标志位操作指令

a、LAHF(Load AH from
Flags):AH←Flags的低8位
b、SAHF(Store AH in Flags):Flags的低8位←AH

5、标志位堆栈操作指令

a、PUSHF/PUSHFD(Push Flags onto
Stack):把16位/32位标志寄存器进栈;
b、POPF/POPFD(Pop Flags off
Stack):把16位/32位标志寄存器出栈;

6、逻辑操作指令的小结

  下面是学习标志位指令的控件,浏览者可以运用此类指令,观看标志寄存器的相应变化。

5.2.3 算术运算指令

  算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。

  该组指令的操作数可以是8位、16位和32位(80386+)。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。

  1、加法指令

  a、加法指令ADD(ADD Binary Numbers Instruction)

    指令的格式:ADD  Reg/Mem, Reg/Mem/Imm
    受影响的标志位:AF、CF、OF、PF、SF和ZF
    指令的功能是把源操作数的值加到目的操作数中。

  b、带进位加指令ADC(ADD With Carry Instruction)

    指令的格式:ADC  Reg/Mem,
Reg/Mem/Imm
    受影响的标志位:AF、CF、OF、PF、SF和ZF
    指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中。

  c、加1指令INC(Increment by 1 Instruction)

    指令的格式:INC 
Reg/Mem
    受影响的标志位:AF、OF、PF、SF和ZF,不影响CF
    指令的功能是把操作数的值加1。

  d、交换加指令XADD(Exchange and Add)

    指令的格式:XADD  Reg/Mem,
Reg      ;80486+
    受影响的标志位:AF、CF、OF、PF、SF和ZF
    指令的功能是先交换两个操作数的值,再进行算术“加”法操作。

  例5.3 已知有二个32位数d1和d2(用数据类型DD说明),编写程序片段把d2的值加到d1中。

    解:32位数d1和d2在内存中如下所示。

    方法1:用16位寄存器编写程序
        MOV AX, word ptr d1 ;由于d1是双字类型,必须使用强制类型说明符。以下同。
        MOV DX, word ptr d1+2 ;(DX,AX)构成一个32位数据
        ADD AX, word ptr d2 ;低字相加
        ADC DX, word ptr d2+2 ;高字相加。在低字相加时,有可能会产生“进位”
        MOV word ptr d1, AX ;低字送给d1的低字
        MOV word ptr d1+2, DX ;高字送给d1的高字
    方法2:用32位寄存器编写程序
        MOV EAX, d1
        ADD EAX, d2
        MOV d1, EAX

  从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。

  下面是学习和掌握加法类指令的控件,可模拟执行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠标左键单击寄存器列表框中指定的寄存器,则可修改其值。后面其它控件的有关操作与此相一致,不再说明。从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。

原文地址:https://www.cnblogs.com/little-kwy/p/10037067.html

时间: 2024-11-07 16:17:19

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

汇编语言从入门到精通-CPU资源和存储器

CPU资源和存储器 在汇编语言中,需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口.本章将着重讲解CPU内部寄存器的命名.功能及其常见的用途,还要介绍存储器的分段管理模式.存储单元地址的表示法以及其物理地址的形成方式. 2.1 寄存器组 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一.由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能. 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结

汇编语言从入门到精通-预备知识

汇编语言 1.预备知识 1.1 汇编语言的由来及其特点 1.1.1 机器语言 机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码.机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等. 由于机器指令与CPU紧密相关,所以,不同种类的CPU所对应的机器指令也就不同,而且它们的指令系统往往相差很大.但对同一系列的CPU来说,为了满足各型号之间具有良好的兼容性,要做到:新一代CPU的指令系统必须包括先前

汇编语言从入门到精通-标志位的说明

16位标志寄存器--共用了9个标志位,它们主要用来反映CPU的状态和运算结果的特征.标志位的分布如下表所示.   15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0         OF DF IF TF SF ZF   AF   PF   CF 32位标志寄存器--32位CPU也把标志寄存器扩展到32位,记为EFLAGS.它新增加了四个控制标志位,它们是:IOPL.NT.RF和VM,这些标志位在实方式下不起作用.其它标志位的位置和作用与先前的完全相同.其主要标志位的分布

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

(7)比较运算指令 在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能.为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令.通过这些比较指令的执行来改变有关标志位,为进行条件转移提供依据. 1.比较指令CMP(Compare Instruction) 指令的格式:CMP Reg/Mem, Reg/Mem/Imm 受影响的标志位:AF.CF.OF.PF.SF和ZF 指令的功能:用第二个操作数去减第一个操作数,并根据所得的差设置有关标志位,为随后

汇编语言从入门到精通-通用寄存器功能的说明

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),每个寄存器都有自己的名称,可独立存取.程序员可利用数据寄存器

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

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

大牛分享C++学习建议,从入门到精通速学的干货,学到就是赚发了

C++学习建议 大牛分享C++学习建议,从入门到精通速学的干货,学到就是赚发了C++缺点之一,是相对许多语言复杂,而且难学难精.许多人说学习C语言只需一本K&R<C程序设计语言>即可,但C++书籍却是多不胜数.我是从C进入C++,皆是靠阅读自学.在此分享一点学习心得.个人认为,学习C++可分为4个层次:创一个小群,供大家学习交流聊天如果有对学C++方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学C++能够持之以恒C++爱好群,如果你想要学好C+

SaltStack 入门到精通 - 第一篇: 安装SaltStack

实际环境的设定: 系统环境: centos6 或centos5 实验机器: 192.168.1.100 软件需求: salt 套件,及其需求环境 实验目的: 成功安装salt,并实现salt主从间通讯 特殊设置: 其它目的: 安装SaltStack(下面简称为salt) epel安装:salt安装需要epel源支持,所以在安装salt前需要先安装epel包 # centos5 下载下面rpm  wget -O    epel.rpm https://dl.fedoraproject.org/pu

SaltStack 入门到精通 - 第七篇: Targeting

什么是Targeting? Targeting minions 是指那些minion会作为运行命令或是执行状态的目标.这些目标可以是一个主机名,系统信息,定义的分组,甚至是自定义的绑定的对象. 例如命令  salt web1 apache.signal restart 可以重启ID 为web1的minion的apache.当然也可以在top文件中使用web1来作为目标匹配的内容: base:   'web1':     - webserver Targing 有哪些匹配方式? Minion Id