gpt4 book ai didi

assembly - 带有数组和字符串的 LDRB 指令

转载 作者:行者123 更新时间:2023-12-04 10:43:53 24 4
gpt4 key购买 nike

我们目前正在类里面介绍 assembly 基础知识。有两个示例代码片段,分别与数组和字符串有关,它们使用了其他地方没有使用过的 LDRB 指令。我知道它加载一个字节而不是像 LDR 这样的词,但我不明白为什么在使用它的地方使用它。类(class) Material 中没有说明。我试着用谷歌搜索它,但我找不到任何东西。

我不知道为什么使用它,无论它是特定于数组和字符串的东西还是正确的语法......我非常感谢我想理解的解释。代码示例如下:

大批:

.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

最佳答案

I don't know why it's used, whether it's something specific to arrays and strings or proper syntax... I would greatly appreciate explanations as I want to understand.



LDR 与 LDRB

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

如果您考虑一下 str,事情就会困难得多。和 strb .如果您使用 str对于字节,您将覆盖其他字节。

数组与字符串

通常,数组可以是“字节”以外的大小。但是,您的示例是一个字节数组。不同之处在于字节数组需要存储大小,而字符串有一个保留字符 '\x00' 作为结束标记。在代码示例中,地址标签 欧亚用于标记数组的结尾。另一种方法是,
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 )。

该字符串类似于 Communications protocol概念称为转义和保留字符。例如 the character EOS= \x7e 可能是字符串的结尾和 ESCAPE= \x7d被预定了。那么ESCAPE-!EOS的组合就是字符串中的EOS,ESC-!ESC就是字符串中的ESC。该字符串具有 EOS= \x00以及它不会发生的规则,因此不需要转义。转义的缺点是数据大小与表示的大小不同(有些数据需要两个字节,而其他只有一个)。如果字符串是 Unicode(UTF8、UTF16 等),这也是正确的。

关于assembly - 带有数组和字符串的 LDRB 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59805540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com