更新程序集中的数组

Update array in assembly

刚开始学习汇编,所以有些基础有点吃力。例如,我正在尝试修改一个正常运行的文件以找到最大值。

我想做的是遍历 data_items 并通过更改列表项来修改它,同时仍然保持其执行能力以找到最大值。

我尝试修改 start_loop 以包含 addl data_items, 0x01 但它出错了,因为它只提取第一个值。

然后我将其调整为执行 addl data_items(,%esi,4), 0x01 之类的操作并反复调整它,但这也没有用。我知道这可能非常简单,但我似乎找不到有效的方法。

 #
.section .data
data_items:          #These are the data items trying to modify and store
 .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0

.section .text
.globl _start
_start:
    movl [=10=], %edi             
    movl data_items(,%edi,4), %eax 
    movl %eax, %ebx
start_loop:
    cmpl [=10=], %eax
    je loop_exit
    incl %edi
    movl data_items(,%edi,4), %eax
    cmpl %ebx, %eax
    jle start_loop
    movl %eax, %ebx
    jmp start_loop            
loop_exit:
    movl , %eax            
    int  [=10=]x80

一旦你在 %eax 中有一个数组元素,只需增加上次用于从以下位置读取 %eax 的内存:

start_loop:
    cmpl [=10=], %eax     ; Not actual element if this is 0
    je loop_exit
    incl data_items(,%edi,4)    <<<<<<<<<<<<<<<<<
    incl %edi
    movl data_items(,%edi,4), %eax

这不会影响当前的最大值发现。只有下次最大值才会大1。