assembly - 写作问题
问题描述
-------------------------------------------------- - - - - - 更新 - - - - - - - - - - - - - - - - - - - - ---------------
我正在尝试编写代码以从一个位置反转字符串并将其放置在另一个位置,但在反转部分的开头我一直遇到问题。我想将字符串的最后一个字节加载到另一个寄存器中,但是我得到一个我无法写入的错误。代码是:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Question 3 Assignment 3
; Department of Electrical and Computer Engineering
; Hana Ali
; The purpose of this code is to reverse a string and put it in R1
;**************************************************************************
AREA RESET, CODE, READWRITE
ENTRY
ADR R0, string1 ; R0 is a pointer to string1
ADR R1, stringRev ; R1 is a pointer to stringRev
MOV R2, #0 ; COUNTER
getLength LDRB R3, [R0] ; For every byte in R0
CMP R3, #0
BEQ prep ; If terminated, go to prep
ADD R2, #1 ; Increment counter
ADD R0, #1 ; Go to next byte in string
B getLength ; Go back to loop
prep ADR R0, string1 ; R0 pointer to beginning of string
MOV R4, #0 ; Counter for string reversal
B reverse ; Go to reversing
reverse SUB R2, R2, R4 ; R2 - R4 IN R2
SUB R2, #1 ; R2 - R4 - 1 IN R2
LDRB R5, [R0, R2]! ; Loads byte R2 - R4 - 1, or length - iteration - 1,
; into R5. ESSENTIALLY end of string
CMP R4, R2 ; Compare current iteration with string length
BEQ STOP ; If reached length, stop
STRB R5, [R1, R4] ; Store R5 into location R1 + R4, or start + current
; iteration
ADD R4, #1 ; Increment iteration
B reverse
STOP B STOP
string1 DCB "Goodness Gracious Pan, 0xD",0
; Char array pointed to by string1
stringRev DCB 0 ; Char array pointed to by stringRev
temp DCB 0
END
问题上线了
STRB R5, [R1, R4]
原来R0的起始地址是0x00000054,最后一个字节是0x0000006D。当我们开始循环时,我希望 R0 为 0x0000006D([R0, R2]!,其中 R0 为 0x00000054,R2 是要复制的整个字符串的长度减去当前迭代减去 1,因为我删除了最后一个 0,并且R5 为 0x00000044(正确)。但是,当我开始存储时,我收到“无法写入”错误。我不知道为什么。感谢任何帮助!
解决方案
推荐阅读
- html - 后代选择器比子选择器更具体?
- python - 获取嵌套字典列表中特定键的所有值的列表
- php - Laravel “with” 不填充相关模型
- python-3.x - 改进检查 fasta 文件
- docker - Eclipse Che docker 映像无法在 Synology DS 上启动
- .net-core - 如何在不实际在 EF Core 中运行迁移的情况下将记录添加到 __EFMigrationsHistory
- qiskit - 如何从 Qiskit 连接到 IBMQ?
- gradle - 有没有办法用文件系统中的另一个依赖项替换 Gradle 依赖项?
- google-cloud-platform - 如何从另一个项目访问 GCP Cloud Source Repository?
- javascript - 在 S3 存储桶上设置跨域后,“可能无法导出受污染的画布”问题仍然存在