程序集中最大的长值列表

时间:2012-01-13 07:11:33

标签: linux assembly

我最近一直在努力学习一些装配,而且我目前难以进行一项练习,这需要我找到一个长值列表的最大数量。

代码如下:

.section .data
    data_items: .long 200, 201, 101, 10, 0
    min_val: .long 0x8000000000000000 # MIN_VALUE in long

.section .text
.global _start

    _start:
        movl $0, %edi   # init counter to 0
        movl min_val, %ebx
    start_loop:
        cmpl $0, %eax
        je loop_exit    # go to end if 0 encountered

        incl %edi
        movl data_items(,%edi,4), %eax
        cmpl %ebx, %eax
        jle start_loop  # if new value < max value in ebx, read next element

        movl %eax, %ebx
        jmp start_loop

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

此代码有两个问题:

  • 在尝试汇编代码时,收到消息: 警告:值0x8000000000000000截断为0x0
  • 如果我在另一个逻辑(不需要min_value变量的逻辑)中重写我的代码,则data_items列表中任何大于255的值都会被截断或返回为值%256,即使{{1}的范围也是如此应该更大?

任何人都可以帮我理解我做错了吗?

编辑:更改后,代码如下所示。请注意,在这种情况下,最大值是145而不是401。

.long

1 个答案:

答案 0 :(得分:2)

首先, 0x8000000000000000 甚至不适合长,长long 。长-1是 0xffffffff

至于另一点,我无法评论您尚未发布的代码。