zoukankan      html  css  js  c++  java
  • 汇编语言从入门到精通-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位数据,但做起来就要复杂一些。

  • 相关阅读:
    springboot应用docker部署调用phantomjs出现permission denied修复方法
    vue某单元格设置背景色
    vue编辑当行数据,弹窗赋值
    vue使用element-ui的el-input监听不了键盘事件解决
    js获取当前域名
    Jedis Redis 模糊匹配 取得 key 列表
    电脑启机时出windowssystem32driversootsafe64.sys
    Vue子组件调用父组件的方法
    Docker 连接mongodb
    Unsatisfied dependency expressed through field 'mongoTemplate'
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10037067.html
Copyright © 2011-2022 走看看