<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.arm.com/utility/feedstylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>How the assembler command &amp;amp;#39;ldrb&amp;amp;#39; works</title><link>https://community.arm.com/developer/tools-software/tools/f/armds-forum/925/how-the-assembler-command-39-ldrb-39-works</link><description> Note: This was originally posted on 9th September 2011 at http://forums.arm.com Hi, arch/arm/boot/compressed/head.S (Linux Kernel 3.0.x source) &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /* &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * The kernel build system appends the size of the &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; * decompressed</description><dc:language>en-US</dc:language><generator>Telligent Community 10</generator><item><title>RE: How the assembler command 'ldrb' works</title><link>https://community.arm.com/thread/2705?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:04:48 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:78800d50-de44-4af5-8991-aa1cff8ecbc8</guid><dc:creator>Simon Craske</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 9th September 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Storing a sequence of (unique) bytes and then loading them as a word will return different values between big and little-endian.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160; MOV&amp;#160; r0,#0x00&lt;br /&gt;&amp;#160; MOV&amp;#160; r1,#0x11&lt;br /&gt;&amp;#160; MOV&amp;#160; r2,#0x22&lt;br /&gt;&amp;#160; MOV&amp;#160; r3,#0x33&lt;br /&gt;&lt;br /&gt;&amp;#160; STRB r0,[r4,#0]&lt;br /&gt;&amp;#160; STRB r1,[r4,#1]&lt;br /&gt;&amp;#160; STRB r2,[r4,#2]&lt;br /&gt;&amp;#160; STRB r3,[r4,#3]&lt;br /&gt;&lt;br /&gt;&amp;#160; LDR&amp;#160; r5,[r4] // Little-endian r5=0x33221100, big-endian r5=0x00112233&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;hth&lt;/span&gt;&lt;br /&gt;&lt;span&gt;s.&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How the assembler command 'ldrb' works</title><link>https://community.arm.com/thread/2704?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:04:48 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:06d4ec37-00ab-4835-8fe5-b7d2803d88e3</guid><dc:creator>Martin Weidmann</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 9th September 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;With Big Endian (BE-8) would result is different between a single 32-bit load, and the series of 8-bit loads you quoted.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;If the contents of memory were&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;+0x0 - A&lt;/span&gt;&lt;br /&gt;&lt;span&gt;+0x1 - B&lt;/span&gt;&lt;br /&gt;&lt;span&gt;+0x2 - C&lt;/span&gt;&lt;br /&gt;&lt;span&gt;+0x3 - D&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;LDR r9, [r10]&amp;#160;&amp;#160; results in r9 containing&amp;#160; ABCD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;While the series of LDRBs in your code snippet would result in DCBA&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How the assembler command 'ldrb' works</title><link>https://community.arm.com/thread/2703?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:04:48 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:27fcb3a5-18f1-44c2-8e87-2f1330657334</guid><dc:creator>Il Han</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 9th September 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;That&amp;#39;s interesting.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Then, that codes would work well in any endian mode.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Because the size of decompressed kernel is appended at the end of the compressed data &amp;quot;in little-endian form&amp;quot;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The following code would load the wrong size in big-endian mode.&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ldr r9 [r10]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span&gt;THANK YOU!&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How the assembler command 'ldrb' works</title><link>https://community.arm.com/thread/2702?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:04:47 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:aabafb9d-b427-461e-9c0d-58808ce37f16</guid><dc:creator>Il Han</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 9th September 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Thank you for your reply.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;But my question is not if it is different between little-endian and big-endian, but if it is different between &amp;#39;ldrb&amp;#39; and &amp;#39;ldr&amp;#39; in big-endian mode of ARM.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Because 2 of the following codes get the same result in little-endian mode of ARM.&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ldrb&amp;#160;&amp;#160;&amp;#160; r9, [r10, #0]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ldrb&amp;#160;&amp;#160;&amp;#160; lr, [r10, #1]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; orr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r9, r9, lr, lsl #8&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ldrb&amp;#160;&amp;#160;&amp;#160; lr, [r10, #2]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ldrb&amp;#160;&amp;#160;&amp;#160; r10, [r10, #3]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; orr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r9, r9, lr, lsl #16&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; orr&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r9, r9, r10, lsl #24&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ldr r9 [r10]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span&gt;If 2 of the above codes get the same result in big-endian mode of ARM also,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;why is the command &amp;#39;ldrb&amp;#39; used rather than &amp;#39;ldr&amp;#39;??&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>