我正在经历“从头开始编程”。现在我有以下代码,它应该给2作为最小答案,但当我回显$时,我得到0作为答案。
.section .data
data_items:
.long 3,67,34,222,56,87,9,2,88,22,11,66,900,0
.section .text
.globl _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
jg start_loop
movl %eax,%ebx
jmp start_loop
loop_exit:
movl $1,%eax
int $0x80
答案 0 :(得分:1)
嗯,0小于2
因为如果eax中的值大于当前的ebx,你正在回到循环中,看起来零也被用作这些行中的退出代码
cmpl $0,%eax
je loop_exit
所以在这种情况下,当你点击列表中的零时,它实际上是最低的数字和退出条件
答案 1 :(得分:0)
您没有打印结果。你需要调试。循环执行后,ebx将包含答案。
我知道int 0x80意味着调用外部函数,但我不确定那里有什么细节。好的..根据一个不错的page on interrupt 0x80和system call numbers,$ 1是一个退出代码。
看起来好像你正在打印结果。好的,print语句的基本格式是:
mov eax, <MEMORY POINTER TO STRING>
int 21h
您需要将结果转换为字符,将它们放入内存,然后将内存位置传递给'int 21h'调用,然后将其打印到屏幕上。
尝试一些these examples并查看它们是否适合您。
你可以调试代码来验证发生了什么吗?