请教寄存器寻址问题
从《汇编语言程序设计》(布鲁姆)这本书书里看到的一个例子:.section .datavalues:
.int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
.section .text
.globl _start
_start:
nop
movl values, %eax
movl $values, %edi
movl $100, 4(%edi)
movl $1, %edi
movl values(, %edi, 4), %ebx
movl $1, %eax
int $0x80在这段汇编码的第11行,将1存入了edi寄存器指向的内存里了,我理解就是values这个标签指向的内存,第一个位置应该就是1了,可是在调试的时候那段values的第一个位置还是10,可是上一行的100就存进去了,调试过程如下:# gdb -q movtest3
Reading symbols from /asm/movtest3...done.
(gdb) break *_start+1
Breakpoint 1 at 0x4000b1: file movtest3.s, line 8.
(gdb) run
Starting program: /asm/movtest3
Breakpoint 1, _start () at movtest3.s:8
8 movl values, %eax
(gdb) s
9 movl $values, %edi
(gdb) s
10 movl $100, 4(%edi)
(gdb) x/11d &values
0x6000dc <values>: 10 15 20 25
0x6000ec <values+16>: 30 35 40 45
0x6000fc <values+32>: 50 55 60
(gdb) s
11 movl $1, %edi
(gdb) x/11d &values
0x6000dc <values>: 10 100 20 25
0x6000ec <values+16>: 30 35 40 45
0x6000fc <values+32>: 50 55 60
(gdb) s
12 movl values(, %edi, 4), %ebx
(gdb) x/11d &values
0x6000dc <values>: 10 100 20 25
0x6000ec <values+16>: 30 35 40 45
0x6000fc <values+32>: 50 55 60
(gdb) 有点不理解为什么第一个数字还是10,而不是1呢,恳请大家指点~ 第1个数字的地址是values+0
程序对100的写入地址是values+4,这已经是第2个数的地址了,原值15=>100 而那个1,只写入了寄存器,并未写入内存,当然看不到 回复 3# 爻易
看完你回答我又回去看了下书,确实写到了带括号的寄存器是存到里面指向的地址,不带的是存寄存器。。。还是看书不认真啊- -、谢谢了啊!{:2_172:}
页:
[1]