어셈블리

Submitted by westporch on Mon, 12/14/2009 - 21:49

처음에 value의 값은 1이지만 나중에는 value의 값이 100이 되는 프로그램입니다.
원본 소스에 나름대로 주석을 달아보았는데 올바른 해석인지 궁금하여 질문을 올립니다.

#movetest2.s - An example of moving register data to memory 
.section .data 
value: 
.int 1 ;value 값을 1로 설정
 
.section .text 

.globl _start 
_start: 
nop 
movl $100, %eax ;100을 eax 레지스터에 저장 
movl %eax, value ; eax 레지스터의 값을 value에 이동.
 movl $1, %eax ; 초기 value 값인 1을 eax 레지스터로 이동. 따라서, value 값은 100이 된다? 
movl $0, %ebx int $0x80


아래 내용은 위 프로그램을 gdb로 분석하는 내용입니다.

(gdb) break *_start+1 
Breakpoint 1 ast 0x8048075: file movetest2.s, line 8 
(gdb) run 
Starting program: /home/westporch/S/movetest2 Breakpoint 1, _start () at movetest2.s:8 8 movl $100, %eax 
Current language: auto; currently asm 
(gdb) x/d &value 
0x804908c : 1 
(gdb) s 
_start () at movetest2.s:9 9 movl %eax, value 
(gdb) s 
_start () at movetest2.s:10 10 movl $1, %eax 
(gdb) x/d &value 
0x804908c : 100 
(gdb)