c - 装配函数将 strFrom 添加到 StrTo 的末尾
问题描述
这是我目前正在使用的汇编代码,但我只得到了我尝试更改代码的初始字符串,但我无法得到正确的答案:
.global stringCat
.text
stringCat:
stringCat_loop:
LDRB R2, [R1], #1
STRB R2, [R0], #1
CMP R2, #0
BNE stringCat_loop
BX LR
这是调用函数的 C 代码:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
extern void stringCat(char* strFrom, char* strTo);
int main(void) {
char test3[20] = "ijkl";
char test4[44] = "mnop"
stringCat(test3, test4);
printf("Question 2, stringCat: Correct answer = mnopijkl\n");
printf("Question 2, stringCat: student answer = %s\n\n", test4);
return EXIT_SUCCESS;
}
解决方案
stringCat_loop:
LDRB R2, [R1], #1
STRB R2, [R0], #1
CMP R2, #0
BNE stringCat_loop
BX LR
在您的代码中R0 == test3
, 和R1 == test4
- 以及函数的末尾,我们希望连接test3
到test4
- 即R0
之后R1
(顺便说一句,这是 中参数的相反顺序strcat
)。
但是在你的循环中——你实际上是在做strcpy(R0, R1)
——你遍历每个字节R1
直到你到达一个空字节,然后将每个字节复制到R0
.
你应该做的是:
找到结尾
R1
以开始附加:loop_r1: LDRB R2, [R1], #1 CMP R2, #0 BNE loop_r1
像以前一样做你的 strcpy - 但颠倒你对
R0
and的使用R1
。
推荐阅读
- git - Git 用 url 硬重置
- java - JPA:保存在数据库中后无法找到实体
- ssis - 从 Azure KeyVault 获取连接字符串以用于 ADF IS
- java - 如何在不同时间混合两个音频文件?
- java - Corda:CollectSignaturesFlow 产生 UnsupportedOperationException
- kubernetes - 通过 ssh 在远程计算机中启动 minikube 仪表板
- python - WSL 终端接收命令,但集成的 VSCode 集成终端没有
- swift - 由于证书不受信任,Swift 5.1 UIWebView 不查看 URL
- html - 盒子定位问题
- c++ - 中止运行方法/线程