- 論壇徽章:
- 2
|
從《匯編語言程序設(shè)計(jì)》(布魯姆)這本書書里看到的一個(gè)例子:- .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
復(fù)制代碼 在這段匯編碼的第11行,將1存入了edi寄存器指向的內(nèi)存里了,我理解就是values這個(gè)標(biāo)簽指向的內(nèi)存,第一個(gè)位置應(yīng)該就是1了,可是在調(diào)試的時(shí)候那段values的第一個(gè)位置還是10,可是上一行的100就存進(jìn)去了,調(diào)試過程如下:- [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)
復(fù)制代碼 有點(diǎn)不理解為什么第一個(gè)數(shù)字還是10,而不是1呢,懇請(qǐng)大家指點(diǎn)~ |
|