添加字节和溢出

时间:2015-07-23 03:09:32

标签: assembly x86

所以我是装配编程的新手,我现在正在我的大学上课。我很想知道添加字节和单词......

如果您获得以下地址......

Address     Before     
1000         255
1001         255
1002         255
1003         255

提示是“以下说明对此记忆区域(独立)有什么影响......”

一旦超过256字节,究竟会发生什么?我相信溢出会捕获大量数据,但是因为它会在每个地址中发生什么?

我知道我正在添加

0xFF + 0x01表示一个字节,和 一个字的0xFF + 0x16

1 个答案:

答案 0 :(得分:1)

不同的CPU(在某些情况下,同一CPU上的不同指令)将以不同方式进行添加和溢出。然而;有4种常见病例:

1)该指令仅进行无符号加法,并且溢出导致错误条件(例如“溢出异常”)。在这种情况下0x7F + 0x01 = 0x800xFF + 0x01 = error

2)该指令仅进行有符号加法,并且溢出导致错误条件(例如“溢出异常”)。在这种情况下0x7F + 0x01 = error0xFF + 0x01 = -1 + 1 = 0x00

3)相同的指令用于有符号和无符号加法,其中有2个不同的标志(“溢出”标志和“进位”标志)由指令设置,并且指令不生成错误本身。在这种情况下(如果你关心溢出),在添加之后你会有第二条指令(例如条件分支),它可以测试“溢出”标志(如果添加了签名)或测试“进位”(如果添加是未签名的。)

4)指令执行有符号和无符号加法,并且没有错误条件且没有设置标志。在这种情况下0x7F + 0x01 = 0x800xFF + 0x01 = 0x00

注意:上面的所有示例都假设8位整数带有2个赞美符号。对于较大的整数,它更相似但更大(例如0x7FFF + 0x0001 = 0x80000xFFFF + 0x0001 = 0x0000)。