gpt4 book ai didi

linux - basic linux x86 assembly minimum number 返回不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:58 26 4
gpt4 key购买 nike

我编写了这个基本的 linux x86 汇编应用程序。我希望它在我执行 echo $? 时返回 3 但状态始终为 0。我做错了什么?

.section .data
data_items:
.long 3,67,34,222,45,2,54,34,44,33,22,11,66,0

.section .text
.global _start

_start:
movl $0, %edi
movl data_items(,%edi,4), %eax
movl %eax, %ebx

start_loop:
cmpl $0, %eax
je loop_exit
incl %edi
movl data_items(,%edi,4), %eax
cmpl %ebx, %eax
jge start_loop
movl %eax, %ebx
jmp start_loop

loop_exit:
movl $1, %eax
int $0x80

注意:%ebx 始终包含状态代码,并且它应该包含退出时间的最小值。

固定:

   _start:
movl $0, %edi
movl data_items(,%edi,4), %ebx

start_loop:
incl %edi
movl data_items(, %edi, 4), %eax
cmpl $0, %eax
je loop_exit

cmpl %ebx, %eax
jge start_loop

movl %eax, %ebx

最佳答案

问题是终止零也参与最小值计算。只有在完成最小值检查后,您才检查该零。学习使用调试器单步执行代码。

考虑当您到达最后一项时会发生什么,66。按照 start_loop 中的代码进行操作。显然 66 不是 0 所以它继续,递增索引并获取下一个数字,即零。这当然小于目前的最小值,因此它被存储到 ebx 中,我们再次在 start_loop 结束,它正确地检测到终止条件。但是 ebx 已经归零。

关于linux - basic linux x86 assembly minimum number 返回不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37003670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com