Assembly 处理9位结果溢出到加法运算的问题,加法运算应该存储在x86中的字节ptr中
我正在为UCI的计算机组织入门课程解决一个问题,我们在课程中使用x86汇编语言(使用Visual Studio和MS语法)。虽然问题在于家庭作业,但我们是根据尝试而不是答案的正确性来评分的 我的问题是w.r.t间接内存寻址。整个问题说明如下: 假设EBX=1000(十进制),存储在内存地址1000到1003中的字节值为255、255、255和255(十进制)。以下说明(独立)对该内存区域有什么影响?假设对于多字节数据,最低有效字节存储在最小地址中 a。添加字节ptr[EBX],1Assembly 处理9位结果溢出到加法运算的问题,加法运算应该存储在x86中的字节ptr中,assembly,x86,addressing-mode,Assembly,X86,Addressing Mode,我正在为UCI的计算机组织入门课程解决一个问题,我们在课程中使用x86汇编语言(使用Visual Studio和MS语法)。虽然问题在于家庭作业,但我们是根据尝试而不是答案的正确性来评分的 我的问题是w.r.t间接内存寻址。整个问题说明如下: 假设EBX=1000(十进制),存储在内存地址1000到1003中的字节值为255、255、255和255(十进制)。以下说明(独立)对该内存区域有什么影响?假设对于多字节数据,最低有效字节存储在最小地址中 a。添加字节ptr[EBX],1 ADDR
ADDRESS | Before | After
1000 | 255 | ; The After column is where we place our answers.
1001 | 255 | ; All of these values are unsigned
1002 | 255 |
1003 | 255 |
b。添加单词ptr[EBX],1
ADDRESS | Before | After
1000 | 255 |
1001 | 255 |
1002 | 255 |
1003 | 255 |
ADDRESS | Before | After
1000 | 255 |
1001 | 255 |
1002 | 255 |
1003 | 255 |
c。添加dword ptr[EBX],1
ADDRESS | Before | After
1000 | 255 |
1001 | 255 |
1002 | 255 |
1003 | 255 |
ADDRESS | Before | After
1000 | 255 |
1001 | 255 |
1002 | 255 |
1003 | 255 |
我知道byte ptr[EBX]
将加载值0xFF
,问题(A)本质上归结为ADD 0xFF,0x01
,使用一个字节的内存地址。然而,我不明白的是如何处理由“0x100”引起的溢出,它至少需要9位来表示
我可以为问题(A)添加字节ptr[EBX],1
确定两种可能的解决方案如下:
问题:在单个字节内存中表示加法操作的9位结果的溢出对任何后续内存区域(如果有)有什么影响
任何人在这个话题上发表的见解都将不胜感激,因为我找不到任何x86特定的信息来处理在单字节内存中存储9位数字的溢出问题。在每种情况下,都是从内存中检索到的值(字节、字或双字)+1将产生零并设置溢出标志,因为实际结果无法存储在可用空间中。该零将返回内存,CPU将在其状态寄存器中设置溢出位。设置溢出位的事实将允许作为结果执行操作-它不会影响存储到内存中的内容
想想成百上千的十个单位(如果还教的话)。如果您有9并添加1,则得到0并带有“溢出”。99+1得到00+溢出;999+1获得000+溢出溢出不带到下一个字节。操作数大小很重要-如果您说
字节
,它只会影响该字节。当然,您可以使用调试器检查它。额外的位进入进位标志(CF
)。非常感谢您的评论。下次我将参考调试器输出,尽管我不确定应该如何声明单字节值。我刚刚将C/C++int/short
值传递到我编写的一个函数包装器中,它显然没有关于单字节值进位的相同问题。请使用adc指令。但请注意,x86还有一个溢出标志,用于有符号操作,在这些情况下不会设置它,因为在有符号的情况下,它们只是-1+1=0
,没有溢出。