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 但是我如果将inc %edi 改成 addl $1,%edi程序就成正常运行了。 难道是AMD的64位处理器不支持inc 指令吗
页:
[1]