首页 > 解决方案 > 装配函数将 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;
}

我的当前输出使用我的代码

标签: cassemblyarmarmv7

解决方案


stringCat_loop:
LDRB R2, [R1], #1
STRB R2, [R0], #1
CMP R2, #0
BNE stringCat_loop
BX LR

在您的代码中R0 == test3, 和R1 == test4- 以及函数的末尾,我们希望连接test3test4- 即R0之后R1(顺便说一句,这是 中参数的相反顺序strcat)。

但是在你的循环中——你实际上是在做strcpy(R0, R1)——你遍历每个字节R1直到你到达一个空字节,然后将每个字节复制到R0.


你应该做的是:

  1. 找到结尾R1以开始附加:

     loop_r1:
     LDRB R2, [R1], #1
     CMP R2, #0
     BNE loop_r1
    
  2. 像以前一样做你的 strcpy - 但颠倒你对R0and的使用R1


推荐阅读