GDB

ARM assembler in Raspberry Pi – Chapter 4

As we advance learning the foundations of ARM assembler, our examples will become longer. Since it is easy to make mistakes, I think it is worth learning how to use GNU Debugger gdb to debug assembler. If you develop C/C++ in Linux and never used gdb, shame on you. If you know gdb this small chapter will explain you how to debug assembler directly.

gdb

We will use the example store01 from chapter 3. Start gdb specifying the program you are going to debug.

$ gdb --args ./store01
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
For bug reporting instructions, please see:
...
Reading symbols from /home/roger/asm/chapter03/store01...(no debugging symbols found)...done.
(gdb)

Ok, we are in the interactive mode of gdb. In this mode you communicate with gdb using commands. There is a builtin help command called help. Or you can check the GNU Debugger Documentation. A first command to learn is

(gdb) quit

Ok, now start gdb again. The program is not running yet. In fact gdb will not be able to tell you many things about it since it does not have debugging info. But this is fine, we are debugging assembler, so we do not need much debugging info. So as a first step let’s start the program.

(gdb) start
Temporary breakpoint 1 at 0x8390
Starting program: /home/roger/asm/chapter03/store01 
 
Temporary breakpoint 1, 0x00008390 in main ()

Temporary breakpoint 1, 0x00008390 in main ()

Ok, gdb ran our program up to main. This is great, we have skipped all the initialization steps of the C library and we are about to run the first instruction of our main function. Let’s see whats there.

(gdb) disassemble
Dump of assembler code for function main:
=> 0x00008390 :	ldr	r1, [pc, #40]	; 0x83c0 
   0x00008394 :	mov	r3, #3
   0x00008398 :	str	r3, [r1]
   0x0000839c :	ldr	r2, [pc, #32]	; 0x83c4 
   0x000083a0 :	mov	r3, #4
   0x000083a4 :	str	r3, [r2]
   0x000083a8 :	ldr	r1, [pc, #16]	; 0x83c0 
   0x000083ac :	ldr	r1, [r1]
   0x000083b0 :	ldr	r2, [pc, #12]	; 0x83c4 
   0x000083b4 :	ldr	r2, [r2]
   0x000083b8 :	add	r0, r1, r2
   0x000083bc :	bx	lr
End of assembler dump.

Uh-oh! The instructions referring the label addr_of_myvarX are different. Ok. Ignore that for now, we will learn in a future chapter what has happened. There is an arrow => pointing the instruction we are going to run (it has not been run yet). Before running it, let’s inspect some registers.

(gdb) info registers r0 r1 r2 r3
r0             0x1	1
r1             0xbefff744	3204446020
r2             0xbefff74c	3204446028
r3             0x8390	33680

We can modify registers using p which means print but also evaluates side effects. For instance,

(gdb) p $r0 = 2
$1 = 2
(gdb) info registers r0 r1 r2 r3
r0             0x2	2
r1             0xbefff744	3204446020
r2             0xbefff74c	3204446028
r3             0x8390	33680

gdb has printed $1, this is the identifier of the result and we can use it when needed, so we can skip some typing. Not very useful now but it will be when we print a complicated expression.

(gdb) p $1
$2 = 2

Now we could use $2, and so on. Ok, time to run the first instruction.

(gdb) stepi
0x00008394 in main ()

Well, not much happened, let’s use disassemble, again.

(gdb) disassemble
Dump of assembler code for function main:
   0x00008390 :	ldr	r1, [pc, #40]	; 0x83c0 
=> 0x00008394 :	mov	r3, #3
   0x00008398 :	str	r3, [r1]
   0x0000839c :	ldr	r2, [pc, #32]	; 0x83c4 
   0x000083a0 :	mov	r3, #4
   0x000083a4 :	str	r3, [r2]
   0x000083a8 :	ldr	r1, [pc, #16]	; 0x83c0 
   0x000083ac :	ldr	r1, [r1]
   0x000083b0 :	ldr	r2, [pc, #12]	; 0x83c4 
   0x000083b4 :	ldr	r2, [r2]
   0x000083b8 :	add	r0, r1, r2
   0x000083bc :	bx	lr
End of assembler dump.

Ok, let’s see what happened in r1.

(gdb) info register r1
r1             0x10564	66916

Great, it has changed. In fact this is the address of myvar1. Let’s check this using its symbolic name and C syntax.

(gdb) p &myvar1
$3 = ( *) 0x10564

Great! Can we see what is in this variable?

(gdb) p myvar1
$4 = 0

Perfect. This was as expected since in this example we set zero as the initial value of myvar1 and myvar2. Ok, next step.

(gdb) stepi
0x00008398 in main ()
(gdb) disas
Dump of assembler code for function main:
   0x00008390 :	ldr	r1, [pc, #40]	; 0x83c0 
   0x00008394 :	mov	r3, #3
=> 0x00008398 :	str	r3, [r1]
   0x0000839c :	ldr	r2, [pc, #32]	; 0x83c4 
   0x000083a0 :	mov	r3, #4
   0x000083a4 :	str	r3, [r2]
   0x000083a8 :	ldr	r1, [pc, #16]	; 0x83c0 
   0x000083ac :	ldr	r1, [r1]
   0x000083b0 :	ldr	r2, [pc, #12]	; 0x83c4 
   0x000083b4 :	ldr	r2, [r2]
   0x000083b8 :	add	r0, r1, r2
   0x000083bc :	bx	lr
End of assembler dump.

You can use disas (but not disa!) as a short for disassemble. Let’s check what happened to r3

(gdb) info registers r3
r3             0x3	3

So far so good. Another more step.

(gdb) stepi
0x0000839c in main ()
(gdb) disas
Dump of assembler code for function main:
   0x00008390 :	ldr	r1, [pc, #40]	; 0x83c0 
   0x00008394 :	mov	r3, #3
   0x00008398 :	str	r3, [r1]
=> 0x0000839c :	ldr	r2, [pc, #32]	; 0x83c4 
   0x000083a0 :	mov	r3, #4
   0x000083a4 :	str	r3, [r2]
   0x000083a8 :	ldr	r1, [pc, #16]	; 0x83c0 
   0x000083ac :	ldr	r1, [r1]
   0x000083b0 :	ldr	r2, [pc, #12]	; 0x83c4 
   0x000083b4 :	ldr	r2, [r2]
   0x000083b8 :	add	r0, r1, r2
   0x000083bc :	bx	lr
End of assembler dump.

Ok, lets see what happened, we stored r3, which contained a 3 into myvar1, right? Let’s check this.

(gdb) p myvar1
$5 = 3

Amazing, isn’t it? Ok. Now run until the end.

(gdb) continue
Continuing.
[Inferior 1 (process 3080) exited with code 07]

That’s all for today.

Share on Facebook Share on Google+ Tweet about this on Twitter Share on LinkedIn

, , , , ,

		<h3>14 thoughts on “<span>ARM assembler in Raspberry Pi – Chapter 4</span>”</h3>
	<ul class="commentlist">
			<li class="comment even thread-even depth-1" id="comment-1421">
			<div id="div-comment-1421" class="comment-body">
			<div class="comment-author vcard">
		<img alt="" src="http://1.gravatar.com/avatar/a16ae1e69be669d6f2c5fa0972e39c8a?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a16ae1e69be669d6f2c5fa0972e39c8a?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a16ae1e69be669d6f2c5fa0972e39c8a?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a16ae1e69be669d6f2c5fa0972e39c8a-0">			<cite class="fn"><a href="http://digilander.libero.it/zantaz/" rel="external nofollow" class="url">Mariani Antonio Mario</a></cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-1421">
		June 12, 2013 at 5:58 am</a>		</div>

	<p>smart doc …</p>

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=1421#respond" onclick="return addComment.moveForm( &quot;div-comment-1421&quot;, &quot;1421&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Mariani Antonio Mario">Reply</a></div>
			</div>
	</li><!-- #comment-## -->
	<li class="comment odd alt thread-odd thread-alt depth-1" id="comment-1841">
			<div id="div-comment-1841" class="comment-body">
			<div class="comment-author vcard">
		<img alt="" src="http://2.gravatar.com/avatar/5abb7f23ffdd6c5d7e9d7f04f0903309?s=54&amp;d=mm&amp;r=g" srcset="http://2.gravatar.com/avatar/5abb7f23ffdd6c5d7e9d7f04f0903309?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://2.gravatar.com/avatar/5abb7f23ffdd6c5d7e9d7f04f0903309?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-5abb7f23ffdd6c5d7e9d7f04f0903309-0">			<cite class="fn"><a href="http://www.caravan.coop" rel="external nofollow" class="url">Ben</a></cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-1841">
		November 21, 2013 at 5:12 am</a>		</div>

	<p>This is amazing.. thanks. First time I’ve looked at assembly code and understood anything.</p>

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=1841#respond" onclick="return addComment.moveForm( &quot;div-comment-1841&quot;, &quot;1841&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Ben">Reply</a></div>
			</div>
	</li><!-- #comment-## -->
	<li class="comment even thread-even depth-1 parent" id="comment-804064">
			<div id="div-comment-804064" class="comment-body">
			<div class="comment-author vcard">
		<img alt="" src="http://2.gravatar.com/avatar/e9cb1204c99c20f18a33943e4c436709?s=54&amp;d=mm&amp;r=g" srcset="http://2.gravatar.com/avatar/e9cb1204c99c20f18a33943e4c436709?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://2.gravatar.com/avatar/e9cb1204c99c20f18a33943e4c436709?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-e9cb1204c99c20f18a33943e4c436709-0">			<cite class="fn">Rob</cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-804064">
		February 13, 2015 at 6:22 am</a>		</div>

	<p>This is such an awesome tutorial! Thanks so much for putting it together.</p>

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=804064#respond" onclick="return addComment.moveForm( &quot;div-comment-804064&quot;, &quot;804064&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Rob">Reply</a></div>
			</div>
	<ul class="children">
	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-804127">
			<div id="div-comment-804127" class="comment-body">
			<div class="comment-author vcard">
		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-0">			<cite class="fn">rferrer</cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-804127">
		February 13, 2015 at 8:15 am</a>		</div>

	<p>Thanks Rob! Much appreciated.</p>

Kind regards,

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=804127#respond" onclick="return addComment.moveForm( &quot;div-comment-804127&quot;, &quot;804127&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to rferrer">Reply</a></div>
			</div>
	</li><!-- #comment-## -->
  • John Cole says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-818162">
    		March 12, 2015 at 12:00 am</a>		</div>
    
    	<p>This is excellent.  I know several assembly languages, so this has enabled me to add one more.  However, I do have a problem.  I get a Segmentation Fault when I try to store back the value from a register into memory.  Is code memory protected?</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=818162#respond" onclick="return addComment.moveForm( &quot;div-comment-818162&quot;, &quot;818162&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to John Cole">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-818953">
    			<div id="div-comment-818953" class="comment-body">
    			<div class="comment-author vcard">
    		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-1">			<cite class="fn">rferrer</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-818953">
    		March 12, 2015 at 8:42 pm</a>		</div>
    
    	<p>Hi John,</p>
    

    if you are trying to store data to an address that contains code, yes, it will crash with a segmentation fault because of the memory protections set up by the operating system (and that are enforced by the processor itself). Code segments are in general not writeable.

    Kind regards,

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=818953#respond" onclick="return addComment.moveForm( &quot;div-comment-818953&quot;, &quot;818953&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to rferrer">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Jesus says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-866686">
    		May 14, 2015 at 5:14 pm</a>		</div>
    
    	<p>I studied assembler in university but forgot everything, anyway thank you very much for the tutorial, is great! keep the hard work!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=866686#respond" onclick="return addComment.moveForm( &quot;div-comment-866686&quot;, &quot;866686&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Jesus">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-866729">
    			<div id="div-comment-866729" class="comment-body">
    			<div class="comment-author vcard">
    		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-2">			<cite class="fn">rferrer</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-866729">
    		May 14, 2015 at 7:03 pm</a>		</div>
    
    	<p>Thanks Jesus!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=866729#respond" onclick="return addComment.moveForm( &quot;div-comment-866729&quot;, &quot;866729&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to rferrer">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Darwin Gray says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-875934">
    		May 30, 2015 at 12:55 pm</a>		</div>
    
    	<p>Great tutorial. Clear, concise, very easy to understand. Thanks a lot !</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=875934#respond" onclick="return addComment.moveForm( &quot;div-comment-875934&quot;, &quot;875934&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Darwin Gray">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-875949">
    			<div id="div-comment-875949" class="comment-body">
    			<div class="comment-author vcard">
    		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-3">			<cite class="fn">rferrer</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-875949">
    		May 30, 2015 at 1:26 pm</a>		</div>
    
    	<p>Thanks Darwin!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=875949#respond" onclick="return addComment.moveForm( &quot;div-comment-875949&quot;, &quot;875949&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to rferrer">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • joser says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-978796">
    		November 5, 2016 at 3:54 pm</a>		</div>
    
    	<p>Thank you for these tutorials. I am learning so much going through them.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=978796#respond" onclick="return addComment.moveForm( &quot;div-comment-978796&quot;, &quot;978796&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to joser">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-979186">
    			<div id="div-comment-979186" class="comment-body">
    			<div class="comment-author vcard">
    		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-4">			<cite class="fn">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-979186">
    		November 10, 2016 at 10:19 pm</a>		</div>
    
    	<p>Thanks!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=979186#respond" onclick="return addComment.moveForm( &quot;div-comment-979186&quot;, &quot;979186&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Jason says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-979369">
    		November 15, 2016 at 4:40 am</a>		</div>
    
    	<p>For those who are experimenting with different values for the variables, it might be helpful to note that gdb gives the exit / error code in octal.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=979369#respond" onclick="return addComment.moveForm( &quot;div-comment-979369&quot;, &quot;979369&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Jason">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-979801">
    			<div id="div-comment-979801" class="comment-body">
    			<div class="comment-author vcard">
    		<img alt="" src="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=54&amp;d=mm&amp;r=g" srcset="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" originals="32" src-orig="http://1.gravatar.com/avatar/a779b8290b1ca104fdf84d8016fd010b?s=32&amp;d=mm&amp;r=g" scale="1.5" id="grav-a779b8290b1ca104fdf84d8016fd010b-5">			<cite class="fn">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#comment-979801">
    		November 20, 2016 at 12:29 pm</a>		</div>
    
    	<p>Oh yes. That leading zero is very subtle.</p>
    

    Thanks Jason!

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4/?replytocom=979801#respond" onclick="return addComment.moveForm( &quot;div-comment-979801&quot;, &quot;979801&quot;, &quot;respond&quot;, &quot;416&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • <p></p>
    	<div id="respond" class="comment-respond">
    	<h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2013/01/12/arm-assembler-raspberry-pi-chapter-4/#respond" style="display:none;">Cancel reply</a></small></h3>			<form action="http://thinkingeek.com/wp-comments-post.php" method="post" id="commentform" class="comment-form">
    			<p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> Required fields are marked <span class="required">*</span></p><p class="comment-form-comment"><label for="comment">Comment</label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" aria-required="true" required="required"></textarea></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" aria-required="true" required="required"></p>
    


    书籍推荐