Chapter 1

Exploring AArch64 assembler – Chapter 1

AArch64 is a new 64 bit mode that is part of the ARMv8 architecture presented in 2011 by ARM. It has been progressively been deployed in smartphones and servers. So I think it is a good moment to learn a bit more about the assembler of this architecture.

Hardware availability

Single board computers with ARMv6/ARMv7 architecture are easily available nowadays. One of the most popular choices is the Raspberry Pi.

In contrast, single-board computers that support the 64-bit mode of ARMv8 are less common but they are slowly becoming more popular these days. For instance the Pine64, the ODROID-C2, the Dragonboard 410c, etc. Any of them will do and in general they differ on the specific System on Chip being used.

Note: the Raspberry Pi 3 has a CPU (Cortex-A53) that implements the 64-bit mode of the ARMv8 architecture and technically could run a 64-bit system. But the software system provided by the Raspberry Foundation ( Raspbian) is only for 32-bit and there are no official plans for a 64-bit system.

Update: SuSE has a 64-bit version of its OpenSuSE distribution that can run in the Raspberry Pi 3. Arch also has a 64-bit distribution that can be installed in the RPi3.

Software alternative

Does this mean that without hardware it is not possible to play with AArch64? No! We can still do many things using a cross-toolchain and QEMU in user mode.

Example for Ubuntu 16.04

Just install QEMU and a cross-toolchain for AArch64.

$ sudo apt-get install qemu-user gcc-aarch64-linux-gnu

Now test you can run a “Hello world” written in C. Create a hello.c file with the following contents.

#include <stdio.h>
 
int main(int argc, char *argv[])
{
  printf("Hello AArch64!\n");
  return 0;
}

int main(int argc, char *argv[]) { printf("Hello AArch64!\n"); return 0; }

Now compile it with the cross-compiler for AArch64 that we have installed earlier (the -static flag is important).

$ aarch64-linux-gnu-gcc -static -o hello hello.c

Check it is a AArch64 binary.

$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, for GNU/Linux 3.7.0, BuildID[sha1]=97c2bc66dbe4393aab9e4885df8e223a6baa235a, not stripped

Trying to run it should fail with some confusing error.

$ ./hello 
-bash: ./hello: No such file or directory

But we can run it using the QEMU for AArch64 that we installed earlier.

$ qemu-aarch64 ./hello
Hello AArch64!

Yay!

Note: If you use this option, remember always to run your programs using qemu-aarch64.

Our first AArch64 assembler program

Let’s write a very simple program that just returns an error code of two.

1
2
3
4
5
6
7
8
// first.s
.text
 
.globl main
 
main:
     mov w0, #2
     ret

.globl main

main: mov w0, #2 ret

Let’s assemble it.

$ aarch64-linux-gnu-as -c first.s

And now link it, for convenience we will use gcc.

$ aarch64-linux-gnu-gcc -static -o first first.o

Run it and check the return.

$ ./first             # or use qemu-aarch64 ./first
$ echo $?
2

Yay!

Let’s go through each line of the code above.

1
2
// first.s
.text

Line 1 is just a comment with the name of the file used in this example. Any text in a line that follows a // is a comment and it is ignored. Line 2 is an assembler directive that means “now come instructions of the program”. This is because we can also express data in an assembler file (data goes after a .data directive).

4
.globl main

This is another assembler directive that means main is going to be a global symbol. This means that when constructing the final program, this file will have the global main symbol that is needed by the C library to start a program.

6
7
8
main:
     mov w0, #2 // w0 ← 2
     ret        // return

This is the entry point of our program. Line 6 itself is just a label for the symbol main (that we mentioned above it was a global symbol). Lines 7 and 8 are two instructions. The first one just sets the register w0 to be 2 (we will see what registers are in the next chapter). The second one returns from the main, effectively finishing our program.

When finishing a program, the contents of the register w0 are used to determine the error code of the program. This is the reason why echo $? above prints 2.

Reference documentation

Documentation for the AArch64 instruction set can be found in the ARM® Architecture Reference Manual ARMv8, for ARMv8-A architecture profile

That’s all for today.

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

		<h3>14 thoughts on “<span>Exploring AArch64 assembler – Chapter 1</span>”</h3>
	<ul class="commentlist">
			<li class="comment even thread-even depth-1 parent" id="comment-976674">
			<div id="div-comment-976674" class="comment-body">
			<div class="comment-author vcard">
		<img alt="" src="http://2.gravatar.com/avatar/b06feeb5f27ff3b8ffbb008fae5b304a?s=54&amp;d=mm&amp;r=g" srcset="http://2.gravatar.com/avatar/b06feeb5f27ff3b8ffbb008fae5b304a?s=64&amp;d=mm&amp;r=g 2x" class="avatar avatar-32 photo grav-hashed grav-hijack" height="32" width="32" id="grav-b06feeb5f27ff3b8ffbb008fae5b304a-0" originals="32" src-orig="http://2.gravatar.com/avatar/b06feeb5f27ff3b8ffbb008fae5b304a?s=32&amp;d=mm&amp;r=g" scale="1.5">			<cite class="fn"><a href="https://github.com/Lichtso/UnikernelExperiments" rel="external nofollow" class="url">Alexander Meißner</a></cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-976674">
		October 10, 2016 at 6:35 pm</a>		</div>

	<p>For those who are interested in running your software on AArch64 hardware directly, without any additional firmware or operating system in between, I’ve developed a boot loader and tool chain to test and execute unikernels on a Pine64.</p>

Nice to see there are other people who are into the “deeper” layers and ARM as well.

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=976674#respond" onclick="return addComment.moveForm( &quot;div-comment-976674&quot;, &quot;976674&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Alexander Meißner">Reply</a></div>
			</div>
	<ul class="children">
	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-976980">
			<div id="div-comment-976980" 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">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
	
	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-976980">
		October 15, 2016 at 12:01 pm</a>		</div>

	<p>Hi Alexander,</p>

good to know! Thanks.

	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=976980#respond" onclick="return addComment.moveForm( &quot;div-comment-976980&quot;, &quot;976980&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
			</div>
	</li><!-- #comment-## -->
  • B2B says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-976686">
    		October 10, 2016 at 10:45 pm</a>		</div>
    
    	<p>Very nice. Looking forward for more to come.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=976686#respond" onclick="return addComment.moveForm( &quot;div-comment-976686&quot;, &quot;976686&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to B2B">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-976984">
    			<div id="div-comment-976984" 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">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-976984">
    		October 15, 2016 at 12:38 pm</a>		</div>
    
    	<p>Thanks!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=976984#respond" onclick="return addComment.moveForm( &quot;div-comment-976984&quot;, &quot;976984&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Luis Guilherme says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-980162">
    		November 23, 2016 at 7:46 pm</a>		</div>
    
    	<p>Hope to get all the way to interface with a framebuffer (maybe Raspberry PI) and i/o other than GPIOs :o)</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=980162#respond" onclick="return addComment.moveForm( &quot;div-comment-980162&quot;, &quot;980162&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Luis Guilherme">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-980593">
    			<div id="div-comment-980593" 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">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-980593">
    		November 27, 2016 at 1:02 pm</a>		</div>
    
    	<p>So cool <img draggable="false" class="emoji" alt="🙂" src="https://s.w.org/images/core/emoji/2.2.1/svg/1f642.svg" scale="0"> Let us know if you succeed!</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=980593#respond" onclick="return addComment.moveForm( &quot;div-comment-980593&quot;, &quot;980593&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Javi says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-983990">
    		January 12, 2017 at 11:42 pm</a>		</div>
    
    	<p>Hi, i’m interested in code an operating system from scratch for my Raspberry Pi 3, the idea is starting doing something like Baking Pi. Due to your experience in this topic, do you see this project feasible? Should I use AArch64 assembly for program my PI? What are resources should I look for (because baking pi is for Raspberry Pi 1 and not very extensive). I hope for your answer, very nice tutorial BTW.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=983990#respond" onclick="return addComment.moveForm( &quot;div-comment-983990&quot;, &quot;983990&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Javi">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-984082">
    			<div id="div-comment-984082" 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">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-984082">
    		January 14, 2017 at 4:12 pm</a>		</div>
    
    	<p>Hi Javi,</p>
    

    this is not my field of expertise so I’m afraid I cannot give you any useful pointers or resources for an AArch64-based OS.

    I’ll let you know if I learn of any project like this.

    Kind regards,
    Roger

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=984082#respond" onclick="return addComment.moveForm( &quot;div-comment-984082&quot;, &quot;984082&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • David Todd says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-988233">
    		March 9, 2017 at 5:52 pm</a>		</div>
    
    	<p>Roger, I worked through your ARMv7 tutorials on my Pi-1 several years ago and found them to be excellent, so I was very excited to see this series now that I have a Pi-3!  I’ve done three tutorials so far this morning!  Thank you SOOO much for doing these.  And I’ve enjoyed your other tutorials along the way.  Excellent work!  And much appreciated.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=988233#respond" onclick="return addComment.moveForm( &quot;div-comment-988233&quot;, &quot;988233&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to David Todd">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-988445">
    			<div id="div-comment-988445" 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/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-988445">
    		March 12, 2017 at 1:43 pm</a>		</div>
    
    	<p>Thanks David. I will be a bit slower with this one because I have a strong feeling of “explaining again the same just with 64-bit”. So I try to spend more time being a bit more creative introducing the material. Apologies if I’m slower with new chapters.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=988445#respond" onclick="return addComment.moveForm( &quot;div-comment-988445&quot;, &quot;988445&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • David Todd says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-988239">
    		March 9, 2017 at 7:47 pm</a>		</div>
    
    	<p>Roger, For those wanting to follow your tutorial under an OS running native on the RPi-3 hardware, it is possible now to do so.  A month after you published chapter 1, SUSE announced that they had ported SUSE Linux Enterprise Server (SLES 12.2) to the Raspberry Pi-3 as an aarch64 implementation [ <a href="https://www.suse.com/communities/blog/suse-linux-enterprise-server-raspberry-pi/" rel="nofollow">https://www.suse.com/communities/blog/suse-linux-enterprise-server-raspberry-pi/</a> ].  A variety of openSUSE aarch64 implementations for RPi-3 are also available [ <a href="https://en.opensuse.org/HCL:Raspberry_Pi3" rel="nofollow">https://en.opensuse.org/HCL:Raspberry_Pi3</a> ].   To test this out in a low-overhead manner, it is also possible to copy the image to a USB thumbdrive (or harddrive or SSD) and boot the RPi-3 from that USB device [  <a href="https://en.opensuse.org/HCL:Raspberry_Pi3" rel="nofollow">https://en.opensuse.org/HCL:Raspberry_Pi3</a> , see comments].</p>
    

    Some components haven’t been ported yet, and some don’t have full functionality. But through your chapter 3, at least, the code compiles with gcc and runs, and gdb works (though without full debug info). Though “perf” works, it doesn’t have all the counters implemented — just gives timings, at least on the openSUSE I’m running.

    It appears that Fedora 26 will also have an aarch64 Raspberry Pi-3 implementation; last I saw, it was tentatively expected in June, 2017.

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=988239#respond" onclick="return addComment.moveForm( &quot;div-comment-988239&quot;, &quot;988239&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to David Todd">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-988446">
    			<div id="div-comment-988446" 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/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-988446">
    		March 12, 2017 at 1:45 pm</a>		</div>
    
    	<p>Thanks David!</p>
    

    Looking forward better support of 64-bit software in the Raspberry Pi 3.

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=988446#respond" onclick="return addComment.moveForm( &quot;div-comment-988446&quot;, &quot;988446&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Roger Ferrer Ibáñez">Reply</a></div>
    			</div>
    	</li><!-- #comment-## -->
    
  • Chris Sears says:
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-991689">
    		May 1, 2017 at 6:52 pm</a>		</div>
    
    	<p>You can install a 64b Arch Linux on a Raspberry PI 3.</p>
    
    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=991689#respond" onclick="return addComment.moveForm( &quot;div-comment-991689&quot;, &quot;991689&quot;, &quot;respond&quot;, &quot;3156&quot; )" aria-label="Reply to Chris Sears">Reply</a></div>
    			</div>
    	<ul class="children">
    	<li class="comment byuser comment-author-rferrer bypostauthor odd alt depth-2" id="comment-992005">
    			<div id="div-comment-992005" 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-6">			<cite class="fn">Roger Ferrer Ibáñez</cite> <span class="says">says:</span>		</div>
    	
    	<div class="comment-meta commentmetadata"><a href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/#comment-992005">
    		May 7, 2017 at 9:02 am</a>		</div>
    
    	<p>Hi Chris,</p>
    

    this is now true but it wasn’t when I wrote that post. I will amend it, though.

    Kind regards,

    	<div class="reply"><a rel="nofollow" class="comment-reply-link" href="http://thinkingeek.com/2016/10/08/exploring-aarch64-assembler-chapter1/?replytocom=992005#respond" onclick="return addComment.moveForm( &quot;div-comment-992005&quot;, &quot;992005&quot;, &quot;respond&quot;, &quot;3156&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="/2016/10/08/exploring-aarch64-assembler-chapter1/#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>
    


    书籍推荐