hippopotamus1 发表于 2015-10-20 08:38

linux汇编问题请教



.code32
.section .data
   values:
   .long 12, 34, 32, 9, 56, 8, 0, 92
   output:
   .string "the greatest value is %d\n"
.section .text
   .globl _start
_start:
   nop
   movl $12,%ebx   #movl values,%ebx
   movl $1,%edi
loop:
   movl values(,%edi,4),%eax
   cmp %ebx,%eax
   cmova %eax,%ebx
   inc %edi
   cmp $8,%edi
   jne loop

#print the greatest value
movl $output,%edi
movl $1,%esi
movl $0,%eax
call printf

#call exit
pushl $0
call exit



如上,本程序功能是选出数据段中values中的最大值。编译通过,但是运行出现问题:
1.在执行过第17行之后,%edx中的值还是1不变。并且在执行过第17行后,会跳过第18行,
继续执行第19行(用gdb调试的结果)。所以出现死循环。但是第17行确实是将%edx的值加
1啊。不太懂。所以来这里请教大牛了。

PS: 我的processor架构是AMDx86/64

hippopotamus1 发表于 2015-10-20 08:54

但是我如果将inc %edi 改成 addl $1,%edi程序就成正常运行了。 难道是AMD的64位处理器不支持inc 指令吗
页: [1]
查看完整版本: linux汇编问题请教