问题描述
--------------------------------------------------- - - - - - - - 更新 - - - - - - - - - - - - - - - - - - ------------------
我正在尝试编写代码以从一个位置反转字符串并将其放置在另一个位置,但是在反转部分的开头我一直遇到问题。我想将字符串的最后一个字节加载到另一个寄存器中,但是出现一个我无法写的错误。代码是:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 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(正确)。但是,当我开始存储时,出现“无法写入”错误。我不确定原因。任何帮助都将得到感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)