LINUX.ORG.RU

[assembler] А как узнать адрес последнего элемента в списке?

 


0

0

Modify the maximum program to use an ending address rather than the number 0 to know when to stop.

 .section .data
data_items:                      
 .long 3,67,34,222,45,75,54,34,44,33,22,11,66,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           
 jle start_loop            
 movl %eax, %ebx           
 jmp start_loop            
loop_exit:
   movl $1, %eax          
   int $0x80

Вот. А как узнать адрес?

Сделать 

data_items:
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
end_of_data_items:


И потом сравнивать не EAX с нулем, а текущий адрес и end_of_data_items.

alexru ★★★★
()
Ответ на: комментарий от alexru

А что будет в end_of_data_items?
Мусор?
А если его содержимое совпадёт с одним из значений списка?

И вопрос я задал как-то неправильно.
Вот, например,
>а текущий адрес и end_of_data_items.

что есть "текущий адрес"?

Как получить не data_items(,%edi,4) - содержимое по адресу, а сам адрес?
Это будет что-то вида 0x??????
Их бин дурак, ничерта не понимает.

new_account
() автор топика
Ответ на: комментарий от new_account

end_of_data_items - это адрес, а не значение в твоём массиве.

mv ★★★★★
()
Ответ на: комментарий от new_account

>А что будет в end_of_data_items?

end_of_data_items --- это и будет как раз тот самый "ending address", который тебе требуется.

MYMUR ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.