assembly 如何在汇编中将两个字符串合并为一个字符串?(NASM)

0lvr5msh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(201)

我最近开始学习汇编。我正在尝试将两个32字节的字符串合并成一个预分配为64字节的最终字符串。

section .data
     string1 db "static string",0
section .bss
     user_inputed_string resb 32
     concated_string resb 64

我试图实现字符串concated的方式,用户输入一个去第一和静态一秒:连接字符串=用户输入的字符串+字符串1
我已经在互联网上寻找解决方案,甚至没有一个似乎是NASM的有效语法。

yjghlzjz

yjghlzjz1#

首先将用户输入的字符串复制到输出缓冲区。我假设它是一个以零结尾的字符串。

mov edi, concated_string       ; Address of output buffer
  mov esi, user_inputed_string   ; Address of input buffer
more1:
  mov al, [esi]
  inc esi
  mov [edi], al
  inc edi
  cmp al, 0
  jne more1

然后复制静态字符串,但要覆盖第一个副本中的终止零:

dec edi                        ; Removes the zero
  mov esi, string1
more2:
  mov al, [esi]
  inc esi
  mov [edi], al
  inc edi
  cmp al, 0
  jne more2                      ; This zero needs to stay

您可以将mov al, [esi]inc esi替换为lodsb,也可以将mov [edi], alinc edi替换为stosb

相关问题