微机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

、方向位DF操作指令

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

、中断允许位IF操作指令

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

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

、取标志位操作指令

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

、标志位堆栈操作指令

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位数据,但做起来就要复杂一些。

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

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

    微机CPU的指令系统 5.1 汇编语言指令格式 为了介绍指令系统中指令的功能,先要清楚汇编语言是如何书写指令的,这就象在学习高级语言程序设计时,要清楚高级语言语句的语义.语法及其相关规定一样. 5.1 ...

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

    CPU资源和存储器 在汇编语言中,需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口.本章将着重讲解CPU内部寄存器的命名.功能及其常见的用途,还要介绍存储器的分段管理模式.存储单元地址的表 ...

  3. 汇编语言--微机CPU的指令系统(五)(数据传送指令)

    五.微机CPU的指令系统 1.汇编语言指令格式 汇编语言的指令格式如下: 指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]] [;注释] 指令助忆符体现该指令的功能,它对应一条二进制编码的机 ...

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

    (7)比较运算指令 在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能.为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令.通过这些比较指令的执行 ...

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

    (9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...

  6. 汇编语言--微机CPU的指令系统(五)(算术运算指令)

    (3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...

  7. 汇编语言--微机CPU的指令系统(五)(条件设置字节指令)

    (10)条件设置字节指令 条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有的一组指令.它们在测试条件方面与条件转移是一致的,但在功能方面,它们不是转移, ...

  8. 汇编语言--微机CPU的指令系统(五)(循环指令)

    (8)循环指令 循环结构是程序的三大结构之一.为了方便构成循环结构,汇编语言提供了多种循环指令,这些循环指令的循环次数都是保存在计数器CX或ECX中.除了CX或ECX可以决定循环是否结束外,有的循环指 ...

  9. 汇编语言--微机CPU的指令系统(五)(移位操作指令)

    (5) 移位操作指令 移位操作指令是一组经常使用的指令,它包括算术移位.逻辑移位.双精度移位.循环移位和带进位的循环移位等五大类. 移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的 ...

随机推荐

  1. Bootstrap环境安装加使用---开启Bootstrap 之旅

    1.首先去Bootstrap官网https://getbootstrap.com/上下载Bootstrap 的最新版本 对应的中文页面如下: 下载自己所需要的版本(目前我自己下载的是编译的css和js ...

  2. Educational Codeforces Round 80 (Rated for Div. 2)D(二分答案,状压检验)

    这题1<<M为255,可以logN二分答案后,N*M扫一遍表把N行数据转化为一个小于等于255的数字,再255^2检验答案(比扫一遍表复杂度低),复杂度约为N*M*logN #define ...

  3. Go_bufio包

    bufio 是通过缓冲来提高效率. io操作本身的效率并不低,低的是频繁的访问本地磁盘的文件.所以bufio就提供了缓冲区(分配一块内存),读和写都先在缓冲区中,最后再读写文件,来降低访问本地磁盘的次 ...

  4. Python单例

    01. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 设计模式 是为了可重用代码.让代码更容易被他人理解.保 ...

  5. JDBC 基础用法学习

    JDBC概述 java 数据库链接,sun公司退出的 java 访问数据库的标准规范接口 是一种用于执行SQL语句的 java API 可以作为多种关系数据库提供统一接口 是一组 java 工具类和接 ...

  6. PHP基础学习笔记5

    一.连接MYSQL 1.1 MySQLi - 面向对象 <?php $servername = "localhost"; $username = "username ...

  7. js将后台传入得时间格式化

    //格式化时间函数Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月 ...

  8. 解决vscode出现两个光标的问题

    转载自本人独立博客:https://liushiming.cn/2020/01/20/vscode-two-cursors-in-vim-mode/ 问题概述 今天用vscode的vim模式编辑htm ...

  9. scp--linux命令

    不同服务器之间传输文件, 第一种方式: scp TC_20171230_RCE_15_37_34_build-20.tar.gz test@192.168.18.90://data/build/ 缺点 ...

  10. 6_4 破损的键盘(UVa11988)<链表>

    你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容 ...