“ 4-12”和“ 4 +(-12)”有什么区别?

丹尼

我尝试比较以下表达式:

1) 
    mov al, 4
    mov bl, 12
    sub al, bl ; CF == 1

    0000 0100 (4)
   +
    1111 0100 (-12)
   = 
    1111 1000 (-8 == 248) 

2) 
    mov al, 4
    mov bl, -12
    add al, bl ; CF == 0

    0000 0100 (4)
   +
    1111 0100 (-12)
   = 
    1111 1000 (-8 == 248) 

结果相同,但进位标志不相同。为什么?通过加二进制补码值来实现减法。

福兹

减法不等于在x86上加两个补码。要了解进位标志将假定的值是什么,您必须执行长减法:

    0000 0100
-   0000 1100
-------------
  1 1111 1000

看看最后还有剩余的借款吗?借位是设置进位标志的位置(即进位等于借位)。

某些其他体系结构(例如ARM)的确确实实现了减法作为加法,但不是将两者的补码相加而是将一个人的补码与额外的进位相加。减法为0时非常重要。

例如,您的方法将得出12 − 0:

    0000 1100
+   0000 0000 (- 0000 0000 => + 0000 0000)
-------------
  0 0000 1100

随身携带。但是实际发生的是

    0000 1100
+   1111 1111 (- 0000 0000 => +1111 1111 + 1)
+           1
-------------
  1 0000 1100

随身携带。此详细信息非常重要,否则与0的比较将无法正常进行。在此方案中,只要没有借入即表示进位(即,进位是补充借入)。

Intel进行处理的方式和ARM进行处理的方式实际上总是产生相同的结果,除了进位标志只是相反。因此,只要ARM设置进位,英特尔就会清除它,反之亦然。

两种减法语义学方法都很普遍。ARM方法稍微易于实现,因为它允许直接使用加法器进行减法运算,而无需完全接触进位。采用英特尔的方法,执行减法运算时必须对进位和进位进行补充,但是,在大型方案中,这样做的额外门实际上并不重要。另一方面,对于程序员来说,英特尔的方法更直观,因为考虑到进位标记,并且如果将执行的操作可视化为长减法,则表明借位也更有意义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

4和@ 4有什么区别?

来自分类Dev

4和@ 4有什么区别?

来自分类Dev

beautifulsoup和bs4有什么区别

来自分类Dev

ldc.i4.s和ldc.i4有什么区别?

来自分类Dev

Lisp中的'(((1 2)(3 4)))和'('((1 2)'(3 4))之间有什么区别?

来自分类Dev

arc4random和arc4random_uniform有什么区别?

来自分类Dev

django-bootstrap4和bootstrap4有什么区别?

来自分类Dev

ArrayDeque<>(int capacity) - Scanner.nextInt() == 4 和 (int) 4 有什么区别?

来自分类Dev

Rails 4中的null_session和reset_session有什么区别?

来自分类Dev

ASP.NET4和ASP.NET5 Http管道之间有什么区别?

来自分类Dev

Neo4J中的节点和属性之间有什么区别?

来自分类Dev

在Netty 4中,ctx.close和ctx.channel.close有什么区别?

来自分类Dev

netty 4.x中的ServerBootstrap.option()和ServerBootstrap.childOption()有什么区别

来自分类Dev

带p4打开的rev和haveRev有什么区别?

来自分类Dev

calloc(10,4)和calloc(1,40)有什么区别?

来自分类Dev

UTF-32和UCS-4有什么区别?

来自分类Dev

MVC5身份和MVC4简单成员身份之间有什么区别?

来自分类Dev

{:.4e}和{:2.4}在Python科学计数法中有什么区别

来自分类Dev

Rails 4-request.original_fullpath和request.fullpath有什么区别

来自分类Dev

ANTLR4 ATN中的原子过渡,集合过渡和Epsilon过渡有什么区别?

来自分类Dev

对于我的代码,ptr =&n和ptr =(int *)malloc(4)有什么区别?

来自分类Dev

使用媒体查询时,iPhone 4和iPhone 5之间有什么区别吗?

来自分类Dev

在Spring Appliaction中使用commons logging和slf4j有什么区别?

来自分类Dev

libcurl3和libcurl4有什么区别

来自分类Dev

SureFire JUnitCore和JUnit4 Runners有什么区别

来自分类Dev

3节,4节和6节电池有什么区别

来自分类Dev

Android 4和Android 5中的BringToFront有什么区别?

来自分类Dev

Matrix4“ World Transform”和“ Local Transform”之间有什么区别?

来自分类Dev

BeforeClass (Junit 4) 和 BeforeEach(Junit5) 有什么区别

Related 相关文章

  1. 1

    4和@ 4有什么区别?

  2. 2

    4和@ 4有什么区别?

  3. 3

    beautifulsoup和bs4有什么区别

  4. 4

    ldc.i4.s和ldc.i4有什么区别?

  5. 5

    Lisp中的'(((1 2)(3 4)))和'('((1 2)'(3 4))之间有什么区别?

  6. 6

    arc4random和arc4random_uniform有什么区别?

  7. 7

    django-bootstrap4和bootstrap4有什么区别?

  8. 8

    ArrayDeque<>(int capacity) - Scanner.nextInt() == 4 和 (int) 4 有什么区别?

  9. 9

    Rails 4中的null_session和reset_session有什么区别?

  10. 10

    ASP.NET4和ASP.NET5 Http管道之间有什么区别?

  11. 11

    Neo4J中的节点和属性之间有什么区别?

  12. 12

    在Netty 4中,ctx.close和ctx.channel.close有什么区别?

  13. 13

    netty 4.x中的ServerBootstrap.option()和ServerBootstrap.childOption()有什么区别

  14. 14

    带p4打开的rev和haveRev有什么区别?

  15. 15

    calloc(10,4)和calloc(1,40)有什么区别?

  16. 16

    UTF-32和UCS-4有什么区别?

  17. 17

    MVC5身份和MVC4简单成员身份之间有什么区别?

  18. 18

    {:.4e}和{:2.4}在Python科学计数法中有什么区别

  19. 19

    Rails 4-request.original_fullpath和request.fullpath有什么区别

  20. 20

    ANTLR4 ATN中的原子过渡,集合过渡和Epsilon过渡有什么区别?

  21. 21

    对于我的代码,ptr =&n和ptr =(int *)malloc(4)有什么区别?

  22. 22

    使用媒体查询时,iPhone 4和iPhone 5之间有什么区别吗?

  23. 23

    在Spring Appliaction中使用commons logging和slf4j有什么区别?

  24. 24

    libcurl3和libcurl4有什么区别

  25. 25

    SureFire JUnitCore和JUnit4 Runners有什么区别

  26. 26

    3节,4节和6节电池有什么区别

  27. 27

    Android 4和Android 5中的BringToFront有什么区别?

  28. 28

    Matrix4“ World Transform”和“ Local Transform”之间有什么区别?

  29. 29

    BeforeClass (Junit 4) 和 BeforeEach(Junit5) 有什么区别

热门标签

归档