所以我是装配编程的新手,我现在正在我的大学上课。我很想知道添加字节和单词......
如果您获得以下地址......
Address Before
1000 255
1001 255
1002 255
1003 255
提示是“以下说明对此记忆区域(独立)有什么影响......”
一旦超过256字节,究竟会发生什么?我相信溢出会捕获大量数据,但是因为它会在每个地址中发生什么?
我知道我正在添加
0xFF + 0x01表示一个字节,和 一个字的0xFF + 0x16
答案 0 :(得分:1)
不同的CPU(在某些情况下,同一CPU上的不同指令)将以不同方式进行添加和溢出。然而;有4种常见病例:
1)该指令仅进行无符号加法,并且溢出导致错误条件(例如“溢出异常”)。在这种情况下0x7F + 0x01 = 0x80
和0xFF + 0x01 = error
。
2)该指令仅进行有符号加法,并且溢出导致错误条件(例如“溢出异常”)。在这种情况下0x7F + 0x01 = error
和0xFF + 0x01 = -1 + 1 = 0x00
。
3)相同的指令用于有符号和无符号加法,其中有2个不同的标志(“溢出”标志和“进位”标志)由指令设置,并且指令不生成错误本身。在这种情况下(如果你关心溢出),在添加之后你会有第二条指令(例如条件分支),它可以测试“溢出”标志(如果添加了签名)或测试“进位”(如果添加是未签名的。)
4)指令执行有符号和无符号加法,并且没有错误条件且没有设置标志。在这种情况下0x7F + 0x01 = 0x80
和0xFF + 0x01 = 0x00
。
注意:上面的所有示例都假设8位整数带有2个赞美符号。对于较大的整数,它更相似但更大(例如0x7FFF + 0x0001 = 0x8000
和0xFFFF + 0x0001 = 0x0000
)。