adc是带进位加法指令,它利用了CF位上记录的进位值。

指令格式: adc 操作对象1,操作对象2

功能:操作对象1 = 操作对象1 + 操作对象2 + CF

例如指令 adc  ax,bx实现的功能是: (ax)=(ax)+(bx)+CF

例如:

mov ax,
mov bx,
sub bx,ax
adc ax,

执行后,(ax)=4。adc执行时,相当于计算: (ax)+1+CF = 2+1+1 = 4。

mov ax,
add ax,ax
adc ax,

执行后,(ax)=5。adc执行时,相当于计算: (ax)+3+CF=2+3+0=5。

mov al,98H
add al,al
adc al,

执行后,(al)=34H。adc执行时,相当于计算: (al)+3+CF=30H+3+1=34H。

adc指令的意义:

加法可以分两步来进行:1)低位相加;2)高位相加再加上地位相加产生的进位值

下面的指令和add ax,bx具有相同的结果:

add al,bl
adc ah,bh

所以CPU提供adc指令的目的,就是来进行加法的第二步运算的。adc指令和add指令相配合就可以对更大的数据进行加法运算。

编程计算1EF000H+201000H,结果放在ax(高16位)和bx(低16位)中。

mov ax, 001EH
mov bx,0F000H
add bx,1000H
adc ax,0020H

编程计算1EF0001000H + 2010001EF0H, 结果放在ax(最高16位),bx(次高16位),cx(低16位)中。

mov ax, 001EH
mov bx, 0F000H
mov cx, 1000H
add cx, 1EF0H
adc bx, 1000H
adc ax, 0020H

编写子程序,对两个128位数据进行相加

名称:add128

功能:两个128位数据进行相加

参数:ds:si指向存储第一个数的内存空间,因数据为128,所以需要8个字单元,由低地址单元到高地址单元依次存放128位数据由低到到高的每个字。运算结果存储在第一个数的存储空间中。

ds:di指向存储第二个数的内存空间。

add128:
push ax
push cx
push si
push di sub ax,ax ;将CF设置为0 mov cx, s:
mov ax,[si]
adc ax,[di]
mov [si],ax
inc si
inc si
inc di
inc di
loop s pop di
pop si
pop cx
pop ax
ret

注意:inc和loop指令不影响CF为,但是add指令会影响CF为,所以

inc si

inc si

不能换成

add si,2

adc指令的更多相关文章

  1. 汇编指令之ADC、SBB、XCHG、MOVS指令

    版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明.2019-08-25,23:52:49作者By-----溺心与沉浮----博客园 介绍完这些基础指令,后面就讲到汇编JCC指令了,我觉得介 ...

  2. arm汇编指令

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...

  3. ASM:《X86汇编语言-从实模式到保护模式》第七章应用例:用adc命令计算1到1000的累加

    在16位的处理器上,做加法的指令是add,但是他每次只能做8位或者16位的加法,除此之外,还有一个带进位的加法指令adc(Add With Carry),他的指令格式和add一样,目的操作数可以是8位 ...

  4. ARM指令学习,王明学learn

    ARM指令学习 一.算数和逻辑指令 1— MOV 数据传送指令    2.— MVN 数据取反传送指令    3.— CMP 比较指令    4.— CMN 反值比较指令    5.— TST 位测试 ...

  5. 学习linux内核时常碰到的汇编指令(1)

     转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvg.html 80X86 汇编指令符号大全 +.-.*./∶算术运算符. &∶宏处理操作符. ...

  6. x86汇编指令详解

    80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...

  7. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  8. x86汇编指令具体解释

    80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...

  9. 3.3 x86指令简介

    计算机组成 3 指令系统体系结构 3.3 x86指令简介 x86指令种类繁多,数量庞大.在这一节我们将会学习x86指令的分类,并分析其中最为基础的一部分指令. 通常一个指令系统主要包括这几类指令.运算 ...

随机推荐

  1. 安装phpssdbadmin

    1:先安装nginx+php   参考博文:http://www.cnblogs.com/lemon-le/p/7161356.html 里面有详细的搭建lnmp架构,这里只需参照安装php和ngin ...

  2. python print format

    python print format %o —— oct 八进制 %d —— dec 十进制 %x —— hex 十六进制 1 >>> print('%o' % 20) 2 24 ...

  3. Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)

    一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...

  4. GradleUserGuide中文版 19)Plugins 20)插件规范 21)Java插件

    https://blog.csdn.net/roymuste/article/details/51321881

  5. centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目

    centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...

  6. C++类中this指针的理解

    先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等.这样就像变量x具有int类 ...

  7. Properties类学习笔记

    1.Properties是一个hashTable子类,但它只装String类型的值2.一个Properties集中有一个子Properties集为它的默认属性集,如果在Properties中找不到相关 ...

  8. 用到的linux命令

    1.修改文件权限 chmod 777 文件路径 修改文件下所有文件权限 chmond -R 777 文件路径 2.修改文件 (保存文件的方法,在命令行窗口 shift+:换出底部命令行, q表示退出, ...

  9. Consul之:服务注册与发现

    一.服务的管理(注册与发现)有三种方式: 1:通过配置文件的方式静态注册2:通过HTTP API接口来动态注册(spring cloud使用方式,spring cloud中使用的是consul api ...

  10. MFC/VC CxImage 编译问题 (VS2013)

    最近在搞CxImage,幸好看到一些前辈的积累,避免了很多坑,CxImage默认是VC6.0编译的,因为我用的VS2013,所以从新编译一下,参考前辈博客https://www.cnblogs.com ...