Assembly 带数组和字符串的LDRB指令

Assembly 带数组和字符串的LDRB指令,assembly,arm,Assembly,Arm,我们目前正在课堂上学习组装基础知识。有两个示例代码段,分别与数组和字符串有关,它们使用的LDRB指令在其他任何地方都没有使用过。我知道它加载的是一个字节,而不是像LDR这样的单词,但我不明白为什么在使用它的地方使用它。课程材料中没有给出任何说明。我试着用谷歌搜索,但什么也找不到 我不知道为什么要使用它,不管是数组和字符串的特定内容还是正确的语法。。。如果我想理解,我将非常感谢您的解释。代码示例如下所示: 数组: .text entry: b start arr: .byte 1

我们目前正在课堂上学习组装基础知识。有两个示例代码段,分别与数组和字符串有关,它们使用的LDRB指令在其他任何地方都没有使用过。我知道它加载的是一个字节,而不是像LDR这样的单词,但我不明白为什么在使用它的地方使用它。课程材料中没有给出任何说明。我试着用谷歌搜索,但什么也找不到

我不知道为什么要使用它,不管是数组和字符串的特定内容还是正确的语法。。。如果我想理解,我将非常感谢您的解释。代码示例如下所示:

数组:

.text

entry:    b start

arr:     .byte 10, 20, 25

eoa:

         .align

start:
ldr       r0, =eoa
ldr       r1, =arr
mov       r3, #0

loop:
          ldrb  r2, [r1], #1
          add   r3, r2, r3
          cmp   r1, r0
          bne   loop

stop:
          b stop
字符串:

.text
        b start

str:    .asciz "Greetings and well met"

       .equ   nul, 0

       .align

start:

       ldr   r0, =str
       mov   r1, #0

loop:   
       ldrb  r2, [r0], #1
       add   r1, r1, #1
       cmp   r2, #nul
       bne   loop
       sub   r1, r1,#1

stop:   b stop
我不知道为什么要使用它,不管是数组和字符串的特定内容还是正确的语法。。。如果我想理解,我将非常感谢您的解释


LDR vs LDRB 需要ldrb的主要原因是它可以寻址一个字节。RAM是一个单元,其固有大小取决于硬件。当加载和写入时,
ldrb
可以忽略部分。如果您使用内存映射硬件寄存器,您可能会发现它们的行为不同,您需要以不同的方式访问它们

如果你想到
str
strb
,事情就困难多了。如果对字节使用
str
,则会重写其他字节

数组与字符串 通常,数组的大小可以不是“字节”。但是,您的示例是一个字节数组。不同之处在于字节数组需要存储大小,而字符串有一个保留字符“\x00”作为结束标记。在代码示例中,地址标签eoa用于标记数组的结尾。另一种方法是

arr:     .word 1b-arr-4     #  Store size of array first
         .byte 10, 20, 25
1:
因此,字符串示例使用
cmp r2、#nul
查找零,数组示例使用
cmp r1、r0
查找大小(r1是当前字符串索引,r0是eoa)。数组可以允许数据中的零字符,字符串代码在表示上更紧凑一些(
=str
=arr
加上
=eoa


字符串类似于一个称为转义和保留字符的概念。例如,可以是字符串的结尾,而ESCAPE=
\x7d
是保留的。然后组合逃逸-!EOS是字符串中的EOS,ESC-!ESC是字符串中的ESC。该字符串有一个EOS=
\x00
和一个不能发生的规则,因此不需要转义。转义有一个缺点,即数据大小与表示的大小不同(一些数据占用两个字节,而另一些只占用一个字节)。如果字符串是Unicode(UTF8、UTF16等),也会出现这种情况。

之所以使用这种情况,是因为字符串是由字节而不是单词组成的。显然字节数组也是。所以它只是将字符串/数组逐字节加载到R2中?是的,这是正确的。使用调试器/模拟器亲自查看。最后一部分并非特定于ARM/assembler。这是一个数据结构问题。每个数据结构通常都有权衡。有很多方法可以表示文本或字节。这个例子似乎有点混淆了两者
ldr r0,=eoa
是一个变量,实际添加数据。如果这两种数据结构明确说明了数据的大小,那么你的教授会通过示例更公正地解释这两种数据结构。