У меня есть ниже код сборки:Невозможно получить значение, хранящееся в памяти с помощью режима косвенной адресации
indirect1.s
.section .data
t1:
.long 5
.section .text
.globl _start
_start:
movl $t1, %ecx #we are passing the address to %ecx
movl $5, %eax #we are passing value 5 to %eax
movl (%ecx), %ebx #Using indirect addressing mode we are getting the value from t1 and passing it to ebx
addl %eax, %ebx # add the values in %eax, %ebx and store it in %ebx
movl $1, %eax # call exit program
int $0x80 # Call Master Bruce Wayne
, когда вышеуказанная программа запускается, я получаю значение 10 в качестве ожидаемый
[[email protected] asm-32]$ as indirect1.s -gstabs+ -o indirect1.o
[[email protected] asm-32]$ ld indirect1.o -o indirect1
[[email protected] asm-32]$ ./indirect1
[[email protected] asm-32]$ echo $?
10
Модифицированный вышеуказанную программу ликвидации% ECX реестра:
indirect2.s
.section .data
t1:
.long 5
.section .text
.globl _start
_start:
movl $t1, %ebx # we are passing the address to %ebx
movl $5, %eax # we are passing value 5 to %eax
addl %eax, (%ebx) # add the values in %eax, %ebx and store it in %ebx
movl $1, %eax # call exit program
int $0x80 # Call Master Bruce Wayne
Когда я запускаю выше программы, я не получаю ожидаемый результат, то есть 10 и я, кажется, получить адрес хранится в% EBX
[[email protected] asm-32]$ as indirect2.s -gstabs+ -o indirect2.o
[[email protected] asm-32]$ ld indirect2.o -o indirect2
[[email protected] asm-32]$ ./indirect2
[[email protected] asm-32]$ echo $?
136
Что я делаю неправильно в программе косвенный.
Что вы делаете неправильно? Ну, 'ebx' не содержит желаемого значения, потому что вы его не поместили. (Знаете ли вы, что такое 'int $ 0x80' и какие его требования?) –
@KerrekSB Спасибо за ваш комментарий, когда я указал' addl% eax, (% ebx) ', я предполагаю, что адрес, хранящийся в ebx, будет используется для извлечения значения «5» – mrashok
@KerrekSB, int $ 0x80 вызывает ядро для запуска системного вызова выхода, которое должно выдавать статус выхода на основе содержимого регистра% ebx, которое должно быть 10. – mrashok