Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 处理9位结果溢出到加法运算的问题,加法运算应该存储在x86中的字节ptr中_Assembly_X86_Addressing Mode - Fatal编程技术网

Assembly 处理9位结果溢出到加法运算的问题,加法运算应该存储在x86中的字节ptr中

Assembly 处理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

我正在为UCI的计算机组织入门课程解决一个问题,我们在课程中使用x86汇编语言(使用Visual Studio和MS语法)。虽然问题在于家庭作业,但我们是根据尝试而不是答案的正确性来评分的

我的问题是w.r.t间接内存寻址。整个问题说明如下:

假设EBX=1000(十进制),存储在内存地址1000到1003中的字节值为255、255、255和255(十进制)。以下说明(独立)对该内存区域有什么影响?假设对于多字节数据,最低有效字节存储在最小地址中

a。添加字节ptr[EBX],1

   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
,没有溢出。