汇编代码 - 没有得到正确答案

时间:2009-06-24 12:26:00

标签: assembly

我正在经历“从头开始编程”。现在我有以下代码,它应该给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 

2 个答案:

答案 0 :(得分:1)

嗯,0小于2

因为如果eax中的值大于当前的ebx,你正在回到循环中,看起来零也被用作这些行中的退出代码

cmpl $0,%eax
je loop_exit

所以在这种情况下,当你点击列表中的零时,它实际上是最低的数字和退出条件

答案 1 :(得分:0)

您没有打印结果。你需要调试。循环执行后,ebx将包含答案。

我知道int 0x80意味着调用外部函数,但我不确定那里有什么细节。好的..根据一个不错的page on interrupt 0x80system call numbers,$ 1是一个退出代码。

看起来好像你正在打印结果。好的,print语句的基本格式是:

mov eax, <MEMORY POINTER TO STRING>
int 21h

您需要将结果转换为字符,将它们放入内存,然后将内存位置传递给'int 21h'调用,然后将其打印到屏幕上。

尝试一些these examples并查看它们是否适合您。

你可以调试代码来验证发生了什么吗?