Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 英飞凌TriCore TC1797组装说明JGE_Assembly - Fatal编程技术网

Assembly 英飞凌TriCore TC1797组装说明JGE

Assembly 英飞凌TriCore TC1797组装说明JGE,assembly,Assembly,我正在查看TriCore TC1797代码,以及与之匹配的指令集manual TriCore V1.3.1指令集 我的问题很简单,但编译器生成的汇编代码却让我感到困惑。代码看起来会永远循环,但事实并非如此,代码可以正常工作。怎么可能呢 让我们看一下这些指令行(注释是我对操作的理解): 我不明白的是,既然d9总是一个正数(对吗?),它永远不会是零,那么循环怎么可能存在呢 感谢您的澄清,我在手册中重新阅读了这一点,但无法找到这种情况的解释 ADD d15, d15, #-0x10 ;

我正在查看TriCore TC1797代码,以及与之匹配的指令集manual TriCore V1.3.1指令集

我的问题很简单,但编译器生成的汇编代码却让我感到困惑。代码看起来会永远循环,但事实并非如此,代码可以正常工作。怎么可能呢

让我们看一下这些指令行(注释是我对操作的理解):

我不明白的是,既然d9总是一个正数(对吗?),它永远不会是零,那么循环怎么可能存在呢

感谢您的澄清,我在手册中重新阅读了这一点,但无法找到这种情况的解释

ADD    d15, d15, #-0x10     ; d15 = 4 - 0x10 = 0xFFFFFFF4
EXTR   d9, d15, #0, #16     ; d9 = 0x0000FFF4
这是个错误
EXTR
sign扩展提取的位字段。引述:

EXTR指令通过以下方式填充结果的最高有效位: 扩展提取的位字段的符号(复制 位字段的最高有效位)


因此,
d9
实际上是
0xfffff4
JGE
使用有符号比较,因此它被正确地视为
-12
,并终止循环。

通常,有符号和无符号比较都有条件跳转。是否有类似于
ja
指令的内容?因为对于未签名的文件有
JGE.U
,显然
JGE
是有签名的。因此,它将被视为有符号的,但为正值,因为您的
d9
已被屏蔽为
0x0000FFF4
。因此,使用有符号或无符号比较并不重要。fuz:这肯定是JGE(而不是JGE.U)指令,所以它是有符号比较Jester:我理解正确吗:它将跳转到jumping\U addr?(你在说明后批准了我的评论吗?)事实上,问题是当你说
d9=0x0000FFF4
时,我们信任你。那是错误的
EXTR
符号扩展了提取的位字段,因此
d9
实际上是
0xFFFFFFF4
,这是负数,由
JGE
处理。谢谢!!!我对这个正确答案投了更高的票,但只有在我的声誉超过15后,它才会显示出来。
ADD    d15, d15, #-0x10     ; d15 = 4 - 0x10 = 0xFFFFFFF4
EXTR   d9, d15, #0, #16     ; d9 = 0x0000FFF4