- 论坛徽章:
- 2
|
从《汇编语言程序设计》(布鲁姆)这本书书里看到的一个例子:- .section .data
- values:
- .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就存进去了,调试过程如下:- [root@iZ251yujg9zZ asm]# 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呢,恳请大家指点~ |
|