更新程序集中的数组
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。
刚开始学习汇编,所以有些基础有点吃力。例如,我正在尝试修改一个正常运行的文件以找到最大值。
我想做的是遍历 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。